c# - 字节数组转换混淆
问题描述
我正在读取一个串行端口并从中获取一个字节数组。
它看起来像这样:
我相信数据是正确的,因为我运行它时是 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]);
推荐阅读
- apache2 - 为什么对 `Host: localhost` 的 HTTP 请求不会出现在 Apache2 访问日志中?
- oracle - 使用 Oracle Apex 信息更新表
- postgresql - 将 currval() 添加到查询中
- blazor - 可以将参数传递给 Blazor 根组件吗?
- odoo - 如何在 pdf 报告中获得选定的公司
- node.js - 无法从任何提供商加载凭据
- python - 在数据框中追加行
- python - 对列表中的字符串进行分组,这些字符串具有相同的 substing,在 Python 中是 4 个字母
- python - 查找一个 .csv 文件的列中的值是否在其他 .csv 文件 Python 中可用
- excel - 在excel中向下拖动6个值的中位数