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);
我把µ弄乱了吗?
试试这个
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。