【问题标题】:Can someone explain hex offsets to me?有人可以向我解释十六进制偏移吗?
【发布时间】:2010-09-13 13:34:04
【问题描述】:

我下载了 Hex Workshop,并被告知要读取一个 .dbc 文件。

如果您阅读,它应该包含 28,315 偏移量 0x04 和 0x05

我不确定该怎么做? 0x04 是什么意思?

【问题讨论】:

  • 为什么这个问题被标记了?这是一个完全有效的问题。
  • 看看你通过一个正确的问题得到了多少质量更好的答案?

标签: hex hex-editors


【解决方案1】:

0x04 是 4 的十六进制(0x 只是以 16 为基数的数字表示的常用前缀约定——因为许多人认为是十进制),这将是第四个字节(因为他们说偏移,他们可能会计算第一个字节为字节 0,因此偏移量 0x04 将是第 5 个字节)。

我猜他们是说第 4 和第 5 字节加起来是 28315,但他们有说这是小端还是大端?

28315(十进制)在十六进制表示法中是 0x6E9B,如果是 little-endian,可能在文件中按 0x9B 0x6E 的顺序排列。

注意:小端和大端是指字节写入的顺序。人类通常以大端方式编写十进制符号和十六进制,因此:

256 会写成 0x0100(左边的数字是最大的刻度)

但这需要两个字节,小端系统会先写入低字节:0x00 0x01。大端系统会先写高字节:0x01 0x00。

典型的英特尔系统是小端的,其他系统各不相同。

【讨论】:

  • @OregonGhost:希望你不介意,我觉得你的补充应该成为答案的一部分。
【解决方案2】:

将二进制文件视为字节的线性数组。

0x04 将是数组中的第 5 个(在基于 0 的数组中)元素,而 0x05 将是第 6 个。

0x04 和 0x05 中的两个值可以通过或运算得到数字 28,315。

由于您正在读取的值是 16 位,因此您需要将一个值移位,然后将它们 OR 在一起,即如果您在 c# 中操作文件,您将使用如下内容:

int value = (ByteArray[4] >> 8) | ByteArray[5]);

希望这有助于解释十六进制地址的工作原理。

【讨论】:

    【解决方案3】:

    这是您查看的第 4 个和第 5 个 XX 代码...

    1 2 3 4 5 6 01 AB 11 7B FF 5A

    所以,0x04 和 0x05 是“7B”和“FF”。

    假设你在说什么,在你的情况下 7BFF 应该等于你想要的值。

    HTH

    【讨论】:

      【解决方案4】:

      十六进制的 0x04 是十进制的 4。十六进制的 0x10 是十进制的 16。 calc.exe 可以为您转换十六进制和十进制。

      偏移量 4 表示距离文件开头的 4 个字节。偏移量 0 是文件中的第一个字节。

      【讨论】:

        【解决方案5】:

        查看第 4 和第 5 个字节,它们的值应为 0x6E 0x9B(或 0x9B 0x6E),具体取决于您的字节序。

        【讨论】:

          【解决方案6】:

          开始here。一旦您学会了如何读取十六进制值,您将能够更好地实际解决您的问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-04
            • 2020-06-30
            • 1970-01-01
            • 1970-01-01
            • 2012-07-12
            • 2010-11-05
            • 2011-05-08
            • 2018-08-27
            相关资源
            最近更新 更多