C# 正在发送意外的RS232值

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

RS232编程问题让我毛骨悚然

我有一个char[7]缓冲区,其中包含一些字符,我正在将其写入串行端口。 我正在使用一个串行端口监控程序来监控端口的输入和输出

我发送到端口的缓冲区包含

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。非常感谢。