C#SerialPort编码转换为byte []

时间:2011-08-18 07:40:29

标签: c# encoding serial-port

我知道我从串口(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

如您所见,μcog错误编码,在我的路上。 这是代码:

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);

我在哪里搞砸μ?

2 个答案:

答案 0 :(得分:4)

试试这个

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);

答案 1 :(得分:0)

我相信0x3F字符实际上是一个问号。

尝试设置 port.Encoding to Encoding.ASCII。在调用port.ReadLine();

之前设置此值

否则,您可能必须读取原始字节并查找\ r或\ n。