如何在C#中用串口发送unicode字符

本文关键字:unicode 字符 串口 | 更新日期: 2023-09-27 17:58:35

如何将unicode字符(16位)发送到C#中的串行端口?串行的数据比特率最大为8位,我需要发送16位字符。

编辑当我发送"ş"时,它被发送为"_"

byte[] bt = Encoding.Unicode.GetBytes("ş");
string str = Encoding.UTF8.GetString(bt);
serialport.write(str);

如何在C#中用串口发送unicode字符

您至少需要做两件事:

  • 在发送端和接收端之间达成一致,您将发送该对中的两个字节的订单
  • 同意某种系统来识别下一个到达的字节是一对中的第一个还是第二个字节(您可能需要某种数据包结构或行分隔符)

在某种程度上,如果您同意先发送LSB,您可以使用Encoding.Unicode.GetBytes(<mystring>),但您仍然需要清楚框架(上面的第二点)。

您可能会更好地使用UTF8,而不是UCS16("nicode"),因为这将为您处理所有这些问题。

只需将数据作为字节流逐个发送即可。

使用.NET Framework提供的SerialPort类,就可以使用Write方法

语法:

public void Write(
    string text
)

示例:

SerialPort.Write("love, peace and chocolates");

msdn上的SerialPort.Write方法。

您正在执行:

byte[] bt = Encoding.Unicode.GetBytes("ş");
string str = Encoding.UTF8.GetString(bt);
serialport.write(str);

但你不应该采取不同的做法吗:

//Sender
byte[] bt = Encoding.UTF8.GetBytes("ş");
serialport.write(bt);
//Receiver
byte[4] bt; //Unicode characters could be up to 4 bytes.
SerialPort.Read(bt, 0, 4);
string str = Encoding.UTF8.GetString(bt);

尚未测试/编译过它,但这只是一个粗略的想法。

或者使用SerialPort 的编码属性

//Sender
serialport.Encoding = Encoding.UTF8;
serialport.write("ş");
//Receiver
SerialPort.Encoding = Encoding.UTF8;
string line = SerialPort.ReadLine();