C# 如何在C语言中将二进制数据写入串口#

C# 如何在C语言中将二进制数据写入串口#,c#,binary,serial-port,C#,Binary,Serial Port,我尝试用C#将一些二进制数据写入串行接口: 这是一个远程设备的命令,必须像这样传输。问题就从这里开始。当我使用 System.IO.Ports.SerialPort.Write(Byte[] data, int Offset, int Size) 数据被编码(ASCII、UTF-8或其他格式),这正是我不需要的,因为我的远程设备不懂任何编码 有解决方法吗?您可以尝试以下方法: using System.IO.Ports; public void TestSerialPort() { Seri

我尝试用C#将一些二进制数据写入串行接口:

这是一个远程设备的命令,必须像这样传输。问题就从这里开始。当我使用

System.IO.Ports.SerialPort.Write(Byte[] data, int Offset, int Size)
数据被编码(ASCII、UTF-8或其他格式),这正是我不需要的,因为我的远程设备不懂任何编码

有解决方法吗?

您可以尝试以下方法:

using System.IO.Ports;

public void TestSerialPort()
{
SerialPort serialPort = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);
serialPort.Open();
byte[] data = new byte[] { 1, 2, 3, 4, 5 };
serialPort.Write(data, 0, data.Length);
serialPort.Close();
}

我最近就这样解决了这个问题:

// Update Relay
serialPort2.Close();
serialPort2.PortName="COM3";
serialPort2.Encoding = System.Text.Encoding.GetEncoding("Windows-1252");
serialPort2.BaudRate=9600;
serialPort2.DataBits=8;
serialPort2.Parity=Parity.None;
serialPort2.StopBits= StopBits.One; 
try {serialPort2.Open();
    serialPort2.Write("\u00a0\u0001\u0001\u00a2");
} catch {
    // Open Serial Port Failed
    label1.Text=label1.Text+ " Fail";
}

杰夫

你确定它被编码了吗?除非另一端正在进行编码,否则发送原始
字节
数组如何进行编码?您对该行的具体期望是什么?字符串是“0x02 0x81 0xF4”还是相应的原始数据
SerialPort.Write
肯定会发送原始数据,除非您之前已经对其进行了编码。注意原始数据是不可打印的。你能把你正在写的代码显示出来吗?我觉得你所描述的不大可能。更可能的情况是,IMO编写的代码完全错误…您如何将
0x02 0x81 0xF4…
转换为正在传输的字节数组。。您是否使用
编码将上面的
字符串
转换为字节。GetBytes
?您的意思是
0x02 0x81 0xF4…
是字符串吗?!?或者您是否有格式为
newbyte[]{0x02,0x81,0xF4,…}
的数据?嗨,杰夫,这“几乎有效”。它不适用于0x80和0x9F之间的字符,因为那里的编码表不是线性的。谢谢你的帮助,Stefan也许你可以选择一种不同的编码方式。我不明白为什么没有简单的“二进制”编码。我过去可以直接发送我想要的任何字节给Xmodem,等等。上面的注释也已经写出来了。将字节数组写入串行端口不会对数据进行编码。对不起,把你带到这里来了。是我的串行嗅探器导致了编码问题。
// Update Relay
serialPort2.Close();
serialPort2.PortName="COM3";
serialPort2.Encoding = System.Text.Encoding.GetEncoding("Windows-1252");
serialPort2.BaudRate=9600;
serialPort2.DataBits=8;
serialPort2.Parity=Parity.None;
serialPort2.StopBits= StopBits.One; 
try {serialPort2.Open();
    serialPort2.Write("\u00a0\u0001\u0001\u00a2");
} catch {
    // Open Serial Port Failed
    label1.Text=label1.Text+ " Fail";
}