【发布时间】:2016-07-27 11:41:27
【问题描述】:
我从我的串口收到一个字节数组serial_port[4] {0x00, 0xA0, 0x05, 0xB1},如下所示:
string rec_data += sp.ReadExisting();
我需要使用以下方法将此字符串转换为十进制值:
byte[] Temp = Encoding.ASCII.GetBytes(rec_data);
decimal r0 = Convert.ToDecimal(Temp[0]);
decimal r1 = Convert.ToDecimal(Temp[1]);
decimal r2 = Convert.ToDecimal(Temp[2]);
decimal r3 = Convert.ToDecimal(Temp[3]);
但结果值不是我想要的:
r0 = 0
r1 = 63
r2 = 5
r3 = 63
如您所见,8 位 HEX 值的结果是错误的,等于 63(0x3F) 有什么解决办法吗?
【问题讨论】:
-
从串口读取字节而不是字符串。或者尝试使用
Encoding.Default而不是Encoding.ASCII。 -
@Alexander Petrov 对
Encoding.default的结果相似 -
因为串口的编码还是
Encoding.ASCII。您还需要更改sp.Encoding(最好在创建SerialPort实例之后立即更改)。 ASCII 是 7 位字符集,不能表示大于 127 的值。0xA0大于 127,因此它被编码为 63 -?。 -
@Luaan 我按照您的建议将我的
sp.Encoding更改为默认值并且它有效。非常感谢。 -
这很可能是解决该问题的一种非常糟糕的方法,但如果这是你想要的...... :)
标签: c# ascii .net-cf-3.5