繁体   English   中英

字节数组转换混乱

[英]Byte array conversion confusion

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

看起来像这样:

在此处输入图片说明

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

我究竟做错了什么?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM