[英]C#: SerialPort communication
我想写一下serialport com1
01 00 00 02 37 30 04
这是初始化的命令..
当我写一个char数组或字节数组
c[0] = (char)01;//
c[1] = (char)00;
c[2] = (char)00;
c[3] = (char)02;
c[4] = (char)37;
c[5] = (char)30;
c[6] = (char)04;
serialPort 1.Write(c, 0, c.Length);
byte[] bb1 = System.Text.Encoding.Default.GetBytes(c);
我可以在串口监视器中看到:01 00 00 02 25 1E 04显然37被转换为25和30到1E ...我如何通过37和30而不是十六进制值...我尝试了各种方式...
串口监视器以十六进制显示值,因此它们与您准确发送的值匹配。 没有转换,十进制值37是十六进制的25,十进制值30是十六进制的1E。
在创建阵列时,使用十六进制表示法(0x)作为文字值,然后您会看到值在串行端口监视器中按预期出现:
byte[] c = new byte[] {
0x01,
0x00,
0x00,
0x02,
0x37,
0x30,
0x04
};
serialPort 1.Write(c, 0, c.Length);
这里的问题是你已经指定了以十进制发送的值,并以十六进制查看它们。 显然会有差异。
要解决此问题,请更改代码以使用十六进制指定值,而不是在每个值前加上0x,如下所示:
c[0] = (char)0x01;//
c[1] = (char)0x00;
c[2] = (char)0x00;
c[3] = (char)0x02;
c[4] = (char)0x37;
c[5] = (char)0x30;
c[6] = (char)0x04;
serialPort1.Write(c, 0, c.Length);
然后,您将在输出中看到与您期望的值相同的值。
您传递的是37和30,而不是十六进制值。
你在谈论查看十六进制值吗?
如果是这种情况,你用什么来查看串口输出? 如果它不是你写的东西,那可能只是程序的行为方式。
如果你想以十六进制传递37,请使用0x37而不是37。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.