【问题标题】:Getting different hex value获取不同的十六进制值
【发布时间】:2017-04-12 07:19:48
【问题描述】:

我有一台设备通过串行端口提供不可打印字符的数据。我通过使用编码(获取数据的字节数组)然后使用 BitConverter.ToString()(获取十六进制字符串)将数据转换为十六进制。但是我在 Real Term(TCP 终端)中得到了相同数据的不同十六进制值。我需要以实数形式出现的价值。我该怎么办? 例如:数据 - “\t\0î\0\0\u0098$VeW”, 我的十六进制 - 0900EE00003F24566557, 实值 - 0900EE00009824566557。 我尝试了所有类型的编码。 代码:-

public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    Thread.Sleep(10);
    string recievedData = port.ReadExisting();
}

【问题讨论】:

  • 听起来你应该从串口读取二进制数据。您使用的是哪个 API,您确定它不能只读取原始字节吗?
  • 我通过串行端口的 DataReceived 事件接收数据,我将数据作为字符串获取。
  • 请显示代码 - DataReceived 事件似乎并没有真正为您提供字符串本身。有什么阻止您使用Read(byte[], int, int) 方法?如果您将代码包含在问题中,帮助您会更容易......
  • 对。不要调用ReadExisting - 调用接受字节数组的Read 方法。

标签: c# winforms


【解决方案1】:

问题是您试图读取二进制数据,就好像它是文本一样。不要使用ReadExisting() 调用 - 使用Read(byte[], int, int)

public void HandleDataReceived(object sender, SerialDataReceivedEventArgs e)
{        
    byte[] data = new byte[port.BytesToRead];
    int bytesRead = port.Read(data, 0, data.Length);
    if (bytesRead != data.Length)
    {
        throw new IOException("Unable to read advertised number of bytes");
    }
}

【讨论】:

    猜你喜欢
    • 2015-08-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多