将字符串转换为字节以发送到串行端口

时间:2016-04-18 17:43:32

标签: c# c#-4.0

所以我试图拆分一个字符串并将值作为字节发送到串口。

我找到了一些解决方案和示例,但我可以让它与我的价值观一起使用。

这是我正在尝试的代码,问题是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);

3 个答案:

答案 0 :(得分:2)

十六进制的0x255等于十进制的597,这对于一个字节来说太大了。 你可能正在寻找十六进制0xFF,它等于十进制的255。 如果您想知道如何自己解决这个问题,我建议您阅读十六进制数据。

  • floor(255/16 ^ 1)= 15(F)
  • 255 - 15 * 16 = 15
  • floor(15/16 ^ 0)= 15(F)

因此,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转换为十六进制时出现异常的原因