NULL或HEX串行端口编码



我正在编写一个C#应用程序,该应用程序将从3位COM端口接收串行数据,并以8位UART且无奇偶校验接收。其他设备将发送和接收二进制编码的十六进制。AF01H = 10101010 00000001每个字节两个字符。我已经设置了虚拟com端口和一个简单的应用程序,用于测试目的,并在将设备挂起之前来回发送数据。我发现数据默认是在传输和接收方面编码的,但我都需要是二进制编码的十六进制。我在编码类中看不到该选项,宁愿使用与其他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 = 10101010000001,但是在应用程序的接收端,我获得了16个字节的ASCII编码字符。有什么方法可以在与其他设备的同一页面上获取应用程序?

弄清楚了一种方法。只需要将长的十六进制串转换为两个十六进制字节字节

string hex = txtDatatoSend.Text; //"F1AAAF1234BA01"
int numOfBytes = HEX.Length;
byte[] outbuffer = new byte[numOfBytes / 2];
for (int i = 0; i < numOfBytes; i += 2)
{
outbuffer[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
}
sport.Write(outbuffer, 0, outbuffer.Length);
sport.DiscardOutBuffer()

唯一的警告是您必须输入偶数字符

在另一端,数据被放回字节[],我可以这样解码。

byte[] inbuffer = new byte[sport.BytesToRead];
sport.Read(inbuffer, 0, inbuffer.Length);
txtReceive.AppendText("[" + dtn + "] " + "Received: " + inbuffer.Length + " bytes ");
for (int i = 0; i < inbuffer.Length; i++)
{
string hexValue = inbuffer[i].ToString("X2");
txtReceive.AppendText(inbuffer[i] + " is " + hexValue + "HEX ");
}
txtReceive.AppendText("n");
sport.DiscardInBuffer();

最新更新