【问题标题】:Converting a string to bytes to send to serial port将字符串转换为字节以发送到串行端口
【发布时间】:2016-04-18 17:43:32
【问题描述】:

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

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

这是我正在尝试的代码,问题是 255 似乎生成了一个错误提示。我尝试了一些东西,但似乎无法解决这个问题。

激活的事件持续时间线程 异常:抛出异常:mscorlib.dll 中的“System.OverflowException”(“对于无符号字节而言,值太大或太小。”)。抛出异常:mscorlib.dll 中的“System.OverflowException”(“对于无符号字节而言,值太大或太小。”)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);

【问题讨论】:

    标签: c# c#-4.0


    【解决方案1】:

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

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

    因此,0xFF,也请注意您正在使用的字节序: https://en.wikipedia.org/wiki/Endianness

    【讨论】:

    • 谢谢这可能有效,我将不得不试一试。我正在关注这个guide,它将要发送的值列为“0xFE 0xD0 0x255 0x0 0x0”
    • 好吧,现在您知道在阅读技术方面的内容时需要小心。有时写这些东西的人会打错字,有时他们不明白不同的数字基数是如何工作的。
    【解决方案2】:

    请参阅下面的更正代码:

    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);
    

    【讨论】:

      【解决方案3】:

      嗨,您可以在 2 个字节中保存的最大十六进制值是 0xFF,这就是您尝试将 0x255 转换为十六进制时出现异常的原因

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-10
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多