字节数组转换混乱

时间:2018-08-07 15:23:20

标签: c# arrays serial-port

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

它看起来像这样:

enter image description here

我相信数据是正确的,因为我在运行数据时是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

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

由于转换后您的问题不包含所需的数据类型,因此我将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]);