如何在C#中将unicode字符(16bit)发送到串口?串行的数据位速率最大为8位,我需要发送16位字符。
编辑 当我发送'ş'时,它会被发送为'_'
byte[] bt = Encoding.Unicode.GetBytes("ş");
string str = Encoding.UTF8.GetString(bt);
serialport.write(str);
答案 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");
答案 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();