如何计算文件中的十六进制偏移位置

How to Calculate Hex offset locations in a file

如何计算文件中十六进制偏移量 326a f338(小端)的字节位置。努力理解这是如何计算的。我尝试的步骤是:

  1. 转换为 Little Endian:833f a623
  2. 将 833f 和 a623 转换为十进制:833f = 33599 和 a623 = 42531
  3. 减去 2 个值:42531 - 33599 = 8,932

根据这个计算,326a f338 的十六进制偏移量的位置将是文件的 8,932 字节。这不起作用,因为文件中没有那么多字节。有人可以向我解释一下我计算的哪一部分不正确吗?

您没有正确地从 little-endian 转换为 big-endian。如果你在 little-endian 中有 4 个字节是 326af338,那么你的 big-endian 表示是 38f36a32.

Endian-ness 是你序列化字节的方向。 Little endian 表示最低有效字节 sent/stored 在前,big endian 表示最高有效字节 sent/stored 在前。

在纸上从一种表示形式转换为另一种表示形式需要以相反方向“读取”字节。一个字节,以十六进制表示是 2 位数字,因此您一次读取 little-endian 十六进制数 2 位数字以获得您的 big-endian 十六进制数。

所以你的偏移量是 16 进制的 0x38f36a32,它在 955476530 的 10 进制中有十进制表示。

从 file/stream 向上读取并在该偏移处读取将取决于您的 IO 库。