【发布时间】:2010-09-13 13:34:04
【问题描述】:
我下载了 Hex Workshop,并被告知要读取一个 .dbc 文件。
如果您阅读,它应该包含 28,315 偏移量 0x04 和 0x05
我不确定该怎么做? 0x04 是什么意思?
【问题讨论】:
-
为什么这个问题被标记了?这是一个完全有效的问题。
-
看看你通过一个正确的问题得到了多少质量更好的答案?
标签: hex hex-editors
我下载了 Hex Workshop,并被告知要读取一个 .dbc 文件。
如果您阅读,它应该包含 28,315 偏移量 0x04 和 0x05
我不确定该怎么做? 0x04 是什么意思?
【问题讨论】:
标签: hex hex-editors
0x04 是 4 的十六进制(0x 只是以 16 为基数的数字表示的常用前缀约定——因为许多人认为是十进制),这将是第四个字节(因为他们说偏移,他们可能会计算第一个字节为字节 0,因此偏移量 0x04 将是第 5 个字节)。
我猜他们是说第 4 和第 5 字节加起来是 28315,但他们有说这是小端还是大端?
28315(十进制)在十六进制表示法中是 0x6E9B,如果是 little-endian,可能在文件中按 0x9B 0x6E 的顺序排列。
注意:小端和大端是指字节写入的顺序。人类通常以大端方式编写十进制符号和十六进制,因此:
256 会写成 0x0100(左边的数字是最大的刻度)
但这需要两个字节,小端系统会先写入低字节:0x00 0x01。大端系统会先写高字节:0x01 0x00。
典型的英特尔系统是小端的,其他系统各不相同。
【讨论】:
将二进制文件视为字节的线性数组。
0x04 将是数组中的第 5 个(在基于 0 的数组中)元素,而 0x05 将是第 6 个。
0x04 和 0x05 中的两个值可以通过或运算得到数字 28,315。
由于您正在读取的值是 16 位,因此您需要将一个值移位,然后将它们 OR 在一起,即如果您在 c# 中操作文件,您将使用如下内容:
int value = (ByteArray[4] >> 8) | ByteArray[5]);
希望这有助于解释十六进制地址的工作原理。
【讨论】:
这是您查看的第 4 个和第 5 个 XX 代码...
1 2 3 4 5 6 01 AB 11 7B FF 5A所以,0x04 和 0x05 是“7B”和“FF”。
假设你在说什么,在你的情况下 7BFF 应该等于你想要的值。
HTH
【讨论】:
十六进制的 0x04 是十进制的 4。十六进制的 0x10 是十进制的 16。 calc.exe 可以为您转换十六进制和十进制。
偏移量 4 表示距离文件开头的 4 个字节。偏移量 0 是文件中的第一个字节。
【讨论】:
查看第 4 和第 5 个字节,它们的值应为 0x6E 0x9B(或 0x9B 0x6E),具体取决于您的字节序。
【讨论】:
开始here。一旦您学会了如何读取十六进制值,您将能够更好地实际解决您的问题。
【讨论】: