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

时间:2011-06-08 12:12:25

标签: c# serial-port

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

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

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

4 个答案:

答案 0 :(得分:1)

您至少需要做两件事:

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

在某些时候,如果您同意首先发送LSB,您可以使用Encoding.Unicode.GetBytes(<mystring>),但您仍然需要明确框架(上面的第二点)。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

语法:

public void Write(
    string text
)

示例:

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

SerialPort.Write method on msdn.

答案 3 :(得分:0)

你在做:

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();