c# SerialPort编码转换为字节[]

本文关键字:字节 转换 SerialPort 编码 | 更新日期: 2023-09-27 18:06:12

我知道我从串行端口(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);

我把µ弄乱了吗?

c# SerialPort编码转换为字节[]

试试这个

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字符实际上是一个问号。

尝试设置端口。编码到Encoding. ascii。在调用port之前设置这个值。readline ();

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