我需要能够使用
SerialPort.Write() 方法,除了该方法只接受无符号字节的 byte[] 数组,我将如何将有符号字节写入串行端口?
对于我正在处理的内容,特定命令的值从 -1700 到 1700。
谢谢
噩梦
串行通信通道没有有符号或无符号的概念,只有网络上的 1 和 0 的概念。 是您的操作系统(以及最终您的 CPU 架构)在发送端和接收端为这些 1 和 0 分配一个数值。
您声明的值范围不能用字节表示(根据我的评论和您的回复)。 您需要了解接收设备对给定数字的期望位模式(另一个设备是大端序还是小端序?),然后您可以发送适当的 byte[] 序列来表示要传输的数字。
如果两个设备具有相同的字节序,则可以设置一个短数组,然后复制到字节数组,如下所示:
short[] sdata = new short[] { 1, -1 };
byte[] bdata = new byte[sdata.Length * 2];
Buffer.BlockCopy(sdata, 0, bdata, 0, bdata.Length);
但是,请确保并测试一系列值。 特别是如果您正在处理嵌入式设备,数字编码可能与英特尔 PC 上的编码不完全相同。