我正在尝试从正在嗅探标准收据打印机的COM端口读取数据。我正在使用MSDN中有关docs中发现的SerialPort.DataReceived事件的示例。

我正在获取数据,但字符混乱。如何将其转换为可读文本?它是二进制编码的吗?能否请您提供有关此类串行端口编程的见解?

我在互联网上搜索了数小时,试图弄清楚如何使文本更具可读性,但是我在A和B之间缺少一些概念。



我读过某个地方,可能是协议不匹配。有没有办法检测到这一点?

更新1

我正在StackOverflow的thread I found处尝试新的东西(我使用的是Update 1),我不确定现在要看的是什么,但是我再也找不到奇怪的字符了:



那么如何从这里获取可读的文本?

更新2

我还是有些困惑。



  private static void port_OnReceiveDatazz(object sender,
                              SerialDataReceivedEventArgs e)
   {
       SerialPort spL = (SerialPort)sender;
       byte[] buf = new byte[spL.BytesToRead];
       Console.WriteLine("DATA RECEIVED!");
       spL.Read(buf, 0, buf.Length);
       Console.WriteLine(Convert.ToBase64String(buf));
       foreach (Byte b in buf)
       {
           //Console.Write(b.ToString());
       }
       Console.WriteLine();
   }

最佳答案

是的,您得到了很多字节,如果您注意,则会得到ascii号。 5 0、6 5等是数据的标题。

首先,您需要了解协议,但是如果您想“阅读”该协议,则必须将其转换,而不是使用ToString进行转换,则需要使用:

 Convert.ToBase64String(bytes)

08-17 00:43