我正在读取一个串行端口并从中获取一个字节数组。
它看起来像这样:
我相信数据是正确的,因为我在运行数据时是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
。
我在做什么错了?
答案 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]);