首页 > 解决方案 > 字节数组转换混淆

问题描述

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

它看起来像这样:

在此处输入图像描述

我相信数据是正确的,因为我运行它时是 8/7/18 的 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.

我究竟做错了什么?

标签: c#arraysserial-port

解决方案


无需转换字节;您可以直接使用它们来创建一个新DateTime对象:

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

推荐阅读