【问题标题】:How do these hex values become this?这些十六进制值是如何变成这样的?
【发布时间】:2012-05-31 00:09:20
【问题描述】:

我对变成这些值的一些十六进制值感到非常困惑。我一直在玩弄这些值,但我无法弄清楚。也许这里有人可以给我一个线索,说明这些值如何显示为十六进制,反之亦然。当我得到这些值时,它们是十六进制的倒序。我将它们从左到右排序以使事情变得更简单(我 99% 确信这些值应该是相反的顺序,因为我得到的其他值是相反的顺序)。

  • 6C C4 F0 00 应变为日期/时间格式的 1/1/2000。
  • 6C C4 F0 38 也应该是 1/1/2000,但我不确定这是怎么回事。
  • FF FF FE 38 应为 -2。
  • 00 FF FF FF 应该是 0。
  • FF 00 00 00 应该是 -1。

如果有人能帮我解决这个问题,我将不胜感激!谢谢!

原始数据:

00F0C46C38F0C46C38FEFFFFFFFDFFFF

原始数据以 4 个字节为一组,以十六进制倒序排列。

  • 00F0C46C,应为 2000 年 1 月 1 日的日期/时间格式
  • 38F0C46C,应为 2000 年 1 月 1 日的日期/时间格式
  • 38FEFFFF,应该是-2
  • FFFDFFFF,应该是-3

我知道结构是正确的,因为程序正在运行并正确创建了一个表,每列中只有一些值的处理方式不同。

谢谢!

【问题讨论】:

  • 这非常令人困惑;你有这个问题的额外背景吗?作业说明,或您试图逆向工程的某些源/协议?
  • 给我们一个原始数据(没有任何排序)和任务描述。可能是你下错了订单。
  • 根据我的经验,并不是所有的十六进制值都可以代表一个。例如,每个第 4 字节可以代表某种有效性标志,甚至可以是一个CRC 码。你能给出程序的名称,你试图反转哪个协议?你能给出这样的数据吗(如果可能的话):从程序中检索几个描述相同参数的字节序列。所以我可以比较一下,至少做一些猜测。
  • 我的意思是,如果您有 ParameterA 略有变化,请您对参数进行多次重复测量吗?它至少有助于确定所有字节是否有价值。
  • 程序是我做的。我不介意给你它的源代码,但我不怀疑它会有所帮助。我确实认为 4 字节值是有效标志,但我不知道它是如何开始的。我尝试了简单的数学运算并使用侧翼数字来确定特定值,但我就是想不通。我可以给你我正在尝试转换的文件和我的程序的源代码,以向你展示我在说什么。

标签: hex


【解决方案1】:

您的字节顺序错误。第一个字节似乎是死空间或以其他方式被占用,我打赌你在向我们展示的内容结束时离开了FF

分词:

00  F0C46C38 F0C46C38 FEFFFFFF FDFFFF

现在,颠倒前两个单词的字节顺序,你会得到:

0x386CC4F0 = 946652400

这是

$ date -ur 946652400
Fri Dec 31 15:00:00 UTC 1999

2000 年 1 月 1 日午夜,UTC+9 time zone。太接近了,不可能是巧合,我猜你或者你从哪里获得数据的地方都在那个时区。

现在,以正确的字节顺序排列接下来的两个单词:

FFFFFFFE
FFFFFFFD

你猜怎么着? Two's complement 表示 -2 和 -3。

【讨论】:

  • +1 你完全正确。我已经完成了这个......但你很快:)
  • 数据来自首尔。卓越。让我看看这个以确保!谢谢! :)
  • 天哪!刚刚查看了 Hex Workshop 中的数据检查器,您是完全正确的。我在挠头,想知道为什么这个数字是关闭的。我正在研究日期/时间,并认为负数是经过特殊处理的。终于发现哪里不对了。出于某种原因,原作者在其中一个值前面添加了一个 FF。抛开一切。疯了,再次感谢!
猜你喜欢
  • 2018-05-17
  • 2019-07-30
  • 1970-01-01
  • 2023-02-20
  • 2021-10-22
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多