我是串口新手。目前,我的项目是从机器中提取数据。我通过事件onDataReceive获取数据,机器正在发送字节。
我的问题是第一波字节似乎正确地转换为字符串,但在第二批字节中,我得到了垃圾数据。
垃圾数据是我认为序列号
这是我在onDataReceive方法中的代码:
EmojiSymbols
我试图用txt文件输出输出。
我希望有人可以帮我解决问题。数据处理中的任何提示和建议,特别是字节?
答案 0 :(得分:1)
在不知道serialPort.ReadBufferSize
的大小的情况下,我只能怀疑你的缓冲区正在破坏字符串的编码字节。一个字符可以由一个或多个字节组成。
技巧是在解码字符串之前读取所有字节。
试试这个示例程序:
var encoding = System.Text.Encoding.Unicode;
var message = "I am new in serial port. Currently my project is to extract data from machine.";
using (var ms = new MemoryStream(encoding.GetBytes(message)))
{
var bytes = new List<byte>();
var buffer = new byte[23];
var bytesRead = ms.Read(buffer, 0, buffer.Length);
while (bytesRead > 0)
{
Console.WriteLine(encoding.GetString(buffer, 0, bytesRead));
bytes.AddRange(buffer.Take(bytesRead));
bytesRead = ms.Read(buffer, 0, buffer.Length);
}
Console.WriteLine(encoding.GetString(bytes.ToArray(), 0, bytes.Count));
}
它将输出以下内容:
I am new in� 猀攀爀椀愀氀 瀀漀爀琀� . Currently� 洀礀 瀀爀漀樀攀挀琀 � is to extra� 琀 搀愀琀愀 昀爀漀洀� machine. I am new in serial port. Currently my project is to extract data from machine.
最后一行是正确的,因为它使用所有字节进行解码。之前的行有错误,因为我使用的缓冲区大小为23,这打破了字符串编码。