【问题标题】:Reverse engineer 4 hex values to DateTime将 4 个十六进制值反向工程为 DateTime
【发布时间】:2019-04-21 14:37:04
【问题描述】:

尝试从我的供暖系统将 4 个十六进制值逆向工程为 DateTime 标记

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

我的第一个猜测是这是 Unix 时间戳,因此将 HEX 转换为 DEC 并转换为 32 位 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

但不幸的是,这不起作用

希望有人知道如何转换它。

谢谢

//金

【问题讨论】:

  • 这里没有足够的信息来提供帮助。什么样的供暖系统?有 API 吗?您怎么知道您拥有的值是时间戳而不是其他值?你怎么知道它们等同于那些日期和时间?乍一看,只有第一段发生了变化,这让我想到如果它们时间戳,那么较小的部分在前面。但是6D-5F 是 14 秒的差异,而不是对应值中的 13 秒。那么你知道那些是 exact 值吗?还是它们是近似值?
  • 自启动以来系统保持任意数量的某个时间单位(秒等)也完全有可能,并且启动时的日期/时间存储在其他地方,因此不会在这些值中传达.
  • 嗨,马特。该系统无关紧要,但它是 Vølund PB100 颗粒锅炉。那些为锅炉制造控制器的人有他们自己的在线系统,但这项工作真的很糟糕,因此我们是一些正在制造自己的人:-) 是的,我知道有 14 个不同,但希望系统只是将值四舍五入。我很确定这不是任意系统。这是一张图片。 imgbox.com/UXclSYXS
  • 有一个用于逆向工程的堆栈交换,如果有帮助的话。也许考虑一个交叉帖子?这个问题同样适用于任何一个。
  • 图片没有帮助,但如果您有更多来自不同日期和时间的示例,那就可以了。这里还不够继续。

标签: datetime timestamp hex decimal reverse-engineering


【解决方案1】:

还有一些警报可以使用。

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 从十六进制转换为十进制

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.

【讨论】:

  • 在我看来,距离某个日期还有几分钟。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    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
    

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

    结案:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2016-07-25
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多