所以我试图拆分一个字符串并将值作为字节发送到串口。
我找到了一些解决方案和示例,但我可以让它与我的价值观一起使用。
这是我正在尝试的代码,问题是255似乎生成错误说。我尝试了一些事情,但似乎无法解决这个问题。
已激活的事件持续时间线程 异常:抛出异常:' System.OverflowException'在mscorlib.dll中("对于无符号字节,值太大或太小。")。抛出异常:' System.OverflowException'在mscorlib.dll中("对于无符号字节,值太大或太小。")8.67s [9972]工作线程
SerialPort _SP;
_SP = SerialConnect(SelectedPort, 9600);
string str = "0xFE 0xD0 0x255 0x0 0x0";
byte[] bytes = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray();
_SP.Write(bytes, 0, bytes.Length);
答案 0 :(得分:2)
十六进制的0x255等于十进制的597,这对于一个字节来说太大了。 你可能正在寻找十六进制0xFF,它等于十进制的255。 如果您想知道如何自己解决这个问题,我建议您阅读十六进制数据。
因此,0xFF,也要注意你正在使用的字节序: https://en.wikipedia.org/wiki/Endianness
答案 1 :(得分:0)
请参阅以下更正的代码:
var bytes = new byte[] { 0xFE, 0xD0, 0xFF, 0x0, 0x0 };
var port = SerialConnect(SelectedPort, 9600);
port.Write(bytes, 0, bytes.Length);
如果你确实需要6个字节(0x255
不是错误):
var bytes = new byte[] { 0xFE, 0xD0, 0x2, 0x55, 0x0, 0x0 };
var port = SerialConnect(SelectedPort, 9600);
port.Write(bytes, 0, bytes.Length);
答案 2 :(得分:0)
你可以用2字节保存的最大十六进制值是0xFF,这就是当你尝试将0x255转换为十六进制时出现异常的原因