代码之家  ›  专栏  ›  技术社区  ›  ErocM

字节数组转换混乱

  •  0
  • ErocM  · 技术社区  · 6 年前

    我正在读取串行端口并从中获取字节数组。

    看起来是这样的:

    enter image description here

    我相信数据是正确的,因为我运行数据时是18年7月8日8:03。

    每个字节都是表示部分日期的值。以下是文档:

    它在控制台上检索当前时间和日期。数据已发送 二进制格式。格式与SETTIME命令相同。 示例(Vantage于1998年1月28日上午5:17:42回复):

    “GETTIME”< <42><17><5><28><1><98><2字节CRC>

    我需要分别转换每个字节,这样我就可以得到它的解析值。我试过这个:

        SerialPort sp = (SerialPort)sender;
        int length = sp.BytesToRead;
        byte[] buf = new byte[length];
        sp.Read(buf, 0, length);
        var newarray = BitConverter.ToInt16(buf, 0);
    

    但这将它转换成 13574 .

    我做错什么了?

    2 回复  |  直到 6 年前
        1
  •  2
  •   itsme86    6 年前

    不需要转换字节;可以直接使用它们创建新的 DateTime 对象:

    var time = new DateTime(1900 + buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);
    
        2
  •  0
  •   Ueli    6 年前

    因为转换后您的问题不包含所需的数据类型,所以我使用DateTime作为数据类型,以便以后更容易处理。

    SerialPort sp = (SerialPort)sender;
    int length = sp.BytesToRead;
    byte[] buf = new byte[length];
    sp.Read(buf, 0, length);
    DateTime newDate = new DateTime(1900 + buf[6], buf[5], buf[4], buf[3], buf[2], buf[1]);