簡體   English   中英

C#SerialPort編碼轉換為字節[]

[英]C# SerialPort Encoding conversion to byte[]

我知道我從串行端口(u-blox GPS設備)接收了一些字節格式的數據,看起來應該像這樣:

Hex:        0xB5 0x62 0x01 0x21
ISO 8859-1: µ    b    1    !

所以我從命令行讀取了一個字符串s,並在一個文本框中打印出來,它看起來像:

Tbx:        ?    b       !

看起來不錯,因為文本框未配置為遵守編碼。

當我嘗試將字符串s轉換為字節(應該看起來像第一個十六進制行)時,我得到了

Bytes(d):   63   98   1    33
Bytes(h):   0x3F 0x62 0x1  0x21

如您所見,在我的某個地方,µ char編碼錯誤。 這是代碼:

string s = port.ReadLine();
System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");
System.Text.Encoding ascii = port.Encoding;

byte[] bASCII = ascii.GetBytes(s);
byte[] bICO = Encoding.Convert(ascii, iso_8859_1, bASCII);

我在哪里弄亂µ?

嘗試這個

System.Text.Encoding iso_8859_1 = System.Text.Encoding.GetEncoding("iso-8859-1");
port.Encoding = iso_8859_1;

string s = port.ReadLine();

byte[] theBytes = iso_8859_1.GetBytes(s);

我相信0x3F字符實際上是一個問號。

嘗試 port.Encoding 設置為Encoding.ASCII。 調用port.ReadLine(); 之前設置此值。

否則,您可能必須讀取原始字節並尋找\\ r或\\ n。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM