有人能向我解释一下十六进制偏移量吗?

24

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

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

我不确定如何做到这一点?0x04 意味着什么?


9
为什么这个问题被标记为负分?它是一个完全有效的问题。 - David Arno
看看用一个恰当的问题会得到多么优质的答案? - GEOCHET
6个回答

14

0x04代表16进制中的4(0x只是表示数字的16进制表示中的一个公共前缀约定——因为许多人习惯于十进制),这将是第四个字节(由于他们在说偏移量,他们可能将第一个字节计为第0个字节,因此偏移量0x04将是第5个字节)。

我猜他们在说的是第4个和第5个字节在一起将是28315,但他们有没有说这是小端还是大端?

28315(十进制)在十六进制符号中是0x6E9B,在文件中的顺序可能是0x9B 0x6E,如果是小端则如此。

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

256将被写为0x0100(左边的数字是最大的刻度)

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

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


@OregonGhost:希望你不介意,我觉得你的补充应该成为那个答案的一部分。 - GEOCHET

3

把二进制文件看作一个线性数组,其中的每个元素都是字节。

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

0x04和0x05中的两个值可以通过逻辑或操作符合并成数字28,315。

由于你正在读取的值是16位的,所以你需要将一个值进行位移,然后再进行逻辑或操作。例如,如果你正在使用c#来处理该文件,你可以使用以下代码:

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

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

2

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

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

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

假设您所说的,在您的情况下,7BFF应该等于您所需的值。

希望对您有所帮助。


1

这里开始。一旦你学会了如何阅读十六进制值,你就能更好地解决问题。


1

十六进制中的0x04等于十进制中的4。十六进制中的0x10等于十进制中的16。calc.exe可以帮助你在十六进制和十进制之间进行转换。

偏移量为4代表从文件开头开始计算4个字节。偏移量为0代表文件中的第一个字节。


1

看一下第4和第5个字节,它们应该具有值0x6E 0x9B(或0x9B 0x6E),这取决于你的字节序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接