2015-04-29 2 views
0

Я получаю данные через последовательный порт, и я использую следующий код, чтобы преобразовать строку в шестнадцатеричном представлении и показать его в richtextbox5:Невозможно преобразовать свою строку в шестнадцатеричном представлении

string hex = ""; 
      foreach (char c in RXstring) 
      { 
       uint tmp = c; 
       hex += String.Format("{0:X2}", (uint)System.Convert.ToInt16(tmp.ToString())) ; 
      } 

      richTextBox5.AppendText(hex + " <= Hex"); 

где RXstring - это место хранения данных из последовательного порта. Задача : , когда я отправляю данные, такие как 127 (десятичный) => 01111111 (двоичный) => 7F (hex), он преобразуется правильно, а когда я отправляю такие данные, как 191 или 167, которые разделяют тот самый старший бит 1, и все они 8 бит вывод является 3F, несмотря на другие биты (представление любых 8 бит начинается с 1 3F), что не так с моим кодом? Вы можете помочь, thx.

+0

вы должны относиться к тому, что идет над последовательный порт как необработанные байты, а не строка. вы должны убедиться, что используете правильную кодировку! –

+0

Покажите свой код отправки и больше вашего кода получения. – Shar1er80

+0

Вы уверены, что 'char' является правильным форматом данных для чтения необработанных данных? Вместо этого я использовал бы 'byte'. Он предназначен для чтения символов UTF-16, см. Https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx – Robert

ответ

0

Это пример использования байт - и это, кажется, работает, как вы хотите:

 string hex = ""; 
     byte[] RXstring = { 0xFF, 0xCF, 0xB8, 167,191 }; 
     foreach (byte c in RXstring) 
     { 
      uint tmp = c; 
      hex += String.Format("{0:X2}", (uint)System.Convert.ToInt16(tmp.ToString())); 
     } 

     System.Console.WriteLine("{0} <= Hex", hex); 
+0

, к сожалению, это не сработало, как я ожидал, поскольку я читаю из серии port RXstring должен быть строкой, иначе я не могу использовать: RXstring = serialPort1.ReadExisting(); –

0

Я просто добавить serialPort1.Encoding = Encoding.Default; в мой последовательный порт и работал отлично

Смежные вопросы