【发布时间】:2018-03-04 18:36:22
【问题描述】:
我正在编写一个 C# 应用程序,它将接收来自 3 个不同 COM 端口的串行数据,这些端口配置为 8 位 UART,无奇偶校验。其他设备将发送和接收二进制编码的 HEX ex。 AF01h = 10101010 00000001 每个字节两个字符。我已经设置了虚拟 COM 端口和一个用于测试目的的简单应用程序,并且在连接设备之前来回发送数据。我发现数据在传输和接收时默认为 ASCII 编码,但我需要两者都是二进制编码的 HEX。我在编码类中看不到该选项,并且不希望应用程序使用与其他 3 个设备完全不同的编码。现在我正在使用此代码在发送字符串时对其进行转换
string binarystring = String.Join(String.Empty, hexstring.Select(c => Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2).PadLeft(4, '0')));
sport.Write(binarystring);
txtReceive.AppendText("[" + dtn + "] " + "Sent: " + binarystring + "\n");
目前这适用于测试传输,但我最终会更改代码,将两位十六进制数直接放入字节数组中。
此代码将允许我输入 AF01h = 1010101000000001,但在应用程序的接收端,我得到 16 个字节的 ASCII 编码字符。有没有办法让应用程序与其他设备在同一页面上?
【问题讨论】:
-
不要使用 Write(string) 重载。使用 byte[] 确保您正确编码二进制数据。
-
在将文本框中的 ASCII 字符移动到 Byte[] 之前,我是否必须对其进行编码?一旦我发送字节,ASCII编码/解码是否仍然适用?