有人可以向我解释十六进制偏移量吗?

时间:2020-03-06 14:48:01  来源:igfitidea点击:

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

It should contain 28,315 if you read
  offset 0x04 and 0x05

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

解决方案

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

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

28315(十进制)以十六进制表示为0x6E9B,如果在文件中是little-endian,则顺序为0x9B 0x6E。

注意:Little-endian和big-endian指的是写入的顺序字节。人类通常以big-endian方式编写十进制表示法和十六进制表示法,因此:

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

但这需要两个字节,little-endian系统将首先写入低字节:0x00 0x01. Big-endian系统将首先写入高字节:0x01 0x00。

通常,英特尔系统为低端字节序,其他系统则各不相同。

从这里开始。一旦学习了如何读取十六进制值,我们将处于更好的状态来实际解决问题。

十六进制的0x04是十进制的4. 十六进制的0x10是十进制的16. calc.exe可以为我们在十六进制和十进制之间转换。

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

这是我们查看的第四和第五XX代码...

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

因此,0x04和0x05是" 7B"和" FF"。

假设我们要说的是,在情况下7BFF应该等于期望值。

高温超导

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

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

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

可以将0x04和0x05中的两个值进行"或者"运算以创建数字28,315.

由于我们正在读取的值是16位,因此我们需要将一个值移位,然后将它们进行或者运算,即,如果我们正在c#中操作文件,则可以使用以下方法:

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

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