C# 正在发送意外的RS232值
RS232编程问题让我毛骨悚然 我有一个char[7]缓冲区,其中包含一些字符,我正在将其写入串行端口。 我正在使用一个串行端口监控程序来监控端口的输入和输出 我发送到端口的缓冲区包含C# 正在发送意外的RS232值,c#,serial-port,C#,Serial Port,RS232编程问题让我毛骨悚然 我有一个char[7]缓冲区,其中包含一些字符,我正在将其写入串行端口。 我正在使用一个串行端口监控程序来监控端口的输入和输出 我发送到端口的缓冲区包含 a5 00 01 00 0b 4a 当我进入监视器程序时,监视器程序指示它可以看到: 3f 00 01 00 0b 4a 因此,标题字符要么被监控错误,要么在退出程序的过程中被更改 我被难住了,不知道该怎么解决这个问题 这是我用来填充缓冲区的代码 char[]cmdBuffer=createC
a5 00 01 00 0b 4a
当我进入监视器程序时,监视器程序指示它可以看到:
3f 00 01 00 0b 4a
因此,标题字符要么被监控错误,要么在退出程序的过程中被更改
我被难住了,不知道该怎么解决这个问题
这是我用来填充缓冲区的代码
char[]cmdBuffer=createCommandBuffer(0, 4, 1);
cmdBuffer[4] = Convert.ToChar(what);
placeChecksums(cmdBuffer);
serialPort.Write(cmdBuffer, 0, cmdBuffer.Length);
在调用serialPort.Write
之前,我已在断点中检查了cmdBuffer的内容,它们是正确的。我只能断定监视器程序是错误的,但当我用它来监视其他以相同波特率运行的软件时,它会正确地监视
其他人也有同样的问题吗?您正在处理字符,但您已将值表示为字节
我个人鼓励您尽可能地使用二进制数据,以简化事情-但是a5
被转换为3f
的原因几乎可以肯定是由于SerialPort
的属性,默认为ASCII。值0xA5在ASCII中不存在,因此将其转换为“?”
如果这真的是文本,那么适当地更改编码-但是如果它是二进制数据,那么就使用二进制API(处理字节和字节数组而不是字符、字符数组和字符串)。Jon-谢谢。我正在使用char结构并使用char a='\x00a5'填充它们;我将全部更改为byte…thx.yep,这就完成了技巧。Ascii编码属性101。非常感谢。