2015-04-29 38 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(二進制)=>是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

不幸的是,它沒有像我期望的那樣工作,因爲我正在從串行端口RXstring必須是字符串,否則,我無法使用: RXstring = serialPort1.ReadExisting(); –

0

我只是添加serialPort1.Encoding = Encoding.Default;到我的串行端口和工作完全

相關問題