将4个十六进制值反向转换为DateTime

时间:2019-04-01 17:26:44

标签: datetime timestamp hex decimal reverse-engineering

尝试从加热系统中将4个十六进制值反向工程为DateTime戳

我知道: 5F:A2:30:77 --> 2019.03-10 - 10:08 6D:A2:30:77 --> 2019.03-10 - 10:21

我的第一个猜测是这是Unix时间戳,因此将HEX转换为DEC并转换为32bit int =>

5F:A2:30:77 -> 1999675999 equivalent to 2033-05-14T09:33:19+00:00 in ISO 8601 6D:A2:30:77 -> 1999676013 equivalent to 2033-05-14T09:33:33+00:00 in ISO 8601

但不幸的是,这不起作用

希望有些东西对如何转换它有个好主意。

谢谢

//金

3 个答案:

答案 0 :(得分:0)

还有更多警报可以使用。

1) 20:32:30:77 --> 2019-03-03 - 09:05
2) 27:32:30:77 --> 2019-03-03 - 09:11
3) 5F:A2:30:77 --> 2019.03-10 - 10:08
4) 6D:A2:30:77 --> 2019.03-10 - 10:21
5) 9A:A4:30:77 --> 2019-03-10 - 19:38
6) 9B:A4:30:77 --> 2019-03-10 - 19:39

X) X1:X2:X3:X4

X1 = are minutes, This is easy to see from the values I have.

但是其余的如何一起工作以及如何转换为日期/时间...?

我很确定必须向后读取字节

如果我将#3和#5从十六进制转换为DEC

3) 77:30:A2:5F -> 1999675999
5) 77:30:A4:9A -> 1999676570
this gives a difference of '571' and The time frame is 9 hours, 30 minutes,
which results in 570 minutes.

答案 1 :(得分:0)

77:30:A2:5F-> 1999675999 5)77:30:A4:9A-> 1999676570 两者之间的差异为“ 571”,时间范围为9小时30分钟, 结果是570分钟。 分享改善这个答案

答案 2 :(得分:0)

我们已经解决了这种转换的难题:-)。

byte 1 = Minutes after midnight.
byte 2 = Day of the month.
byte 3 = Month.
byte 4 = Number of years since 1900.

# 2019.03.10 19:38
stamp = int(0x7730A49A)
time = stamp & 0b111111111111
hours = int(time/60)
minutes = time - (hours*60)
day = (stamp >> 12) & 0xFF
month = (stamp >> 20) & 0xF
year = (stamp >> 24) + 1900

感谢所有尝试提供帮助的人。

关闭案例:-)