我需要通过串行端口发送字节,并希望使用 C# 类 SerialPort 的便利性来做到这一点。然而,使用此类通过串行端口发送原始字节存在严格限制,引用ASCIIEncoding类文档:
ASCIIEncoding 对应于 Windows 代码页 20127。因为 ASCII 是 7 位编码,所以 ASCII 字符被限制为最低 128 个 Unicode 字符,从 U+0000 到 U+007F。如果您使用 Encoding.ASCII 属性或 ASCIIEncoding 构造函数返回的默认编码器,则在执行编码操作之前,该范围之外的字符将替换为问号 (?)。
这不是我想要的。如果我有一个大于 0x7F 的字节值,我希望它作为该值发送,而不是编码为问号。我不能使用 UTF-8 编码,因为这会为我的接收设备不期望的字符引入更多字节。SerialPort.Write方法(Char[],Int32,Int32)和(在我看来很愚蠢)SerialPort.Write 方法(Byte[],Int32,Int32)在传输之前对数据进行编码。
看来我可以创建自己的EncoderFallback类,但据我了解,这只允许我指定要使用的另一个字符而不是“?” 还是我假设这一点不正确?
那么是否有可能通过 SerialPort 类发送未被干扰的字节?