我需要通过串口发送字节,并希望使用C#类SerialPort的便利性。然而,使用此类通过串行端口发送原始字节存在严重限制,引自ASCIIEncoding类文档:
ASCIIEncoding对应于Windows代码页20127.由于ASCII是7位编码,因此ASCII字符限制为最低128个Unicode字符,从U + 0000到U + 007F。如果使用Encoding.ASCII属性或ASCIIEncoding构造函数返回的默认编码器,则在执行编码操作之前,该范围之外的字符将替换为问号(?)。
这不是我想要的。如果我的字节值大于0x7F,我希望它作为该值发送,而不是编码作为问号。我不能使用UTF-8编码,因为这会为我的接收设备不期望的字符引入更多字节。 SerialPort.Write Method (Char[], Int32, Int32)和(我认为愚蠢)SerialPort.Write Method (Byte[], Int32, Int32)都会在传输之前对数据进行编码。
看来我可以创建自己的EncoderFallback课程但是根据我的理解,这只允许我指定另一个要使用的字符而不是'?'我假设这个不正确吗?
那么是否可以发送未通过SerialPort类干扰的字节?
答案 0 :(得分:3)
有关ASCIIEncoding和其他类型编码的注释不适用于此重载。此重载使用字节数组,绕过编码。
(看起来这些编码备注是从Write的其他重载中复制/粘贴的。那些重载 - 使用字符数组和字符串 - 确实使用编码。)
- Micah Copple(可能是用户mjcopple - 应该能够“转发”声誉!)