Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 如何计算文件中的十六进制偏移位置_Binary_Hex_Byte_Offset_Hexdump - Fatal编程技术网

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

Binary 如何计算文件中的十六进制偏移位置,binary,hex,byte,offset,hexdump,Binary,Hex,Byte,Offset,Hexdump,如何计算文件中十六进制偏移量326a f338(小端)的字节位置。难以理解这是如何计算的。我尝试的步骤是: 转换为Little Endian:833f a623 将833f和a623转换为十进制:833f=33599和a623=42531 减去2个值:42531-33599=8932 根据此计算,326a f338的十六进制偏移量的位置将是文件的8932字节。这不起作用,因为文件中没有那么多字节。有人能解释一下我的计算哪一部分是不正确的吗?你没有正确地从小端到大端的转换。如果有4个字节是326a

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

  • 转换为Little Endian:833f a623
  • 将833f和a623转换为十进制:833f=33599和a623=42531
  • 减去2个值:42531-33599=8932

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

    你没有正确地从小端到大端的转换。如果有4个字节是326af338的小端字节,那么大端字节表示法是38f36a32

    Endian ness是序列化字节的方向。Little endian表示首先发送/存储的最低有效字节,big endian表示首先发送/存储的最高有效字节

    在纸上从一种表示转换到另一种表示需要以相反的方向“读取”字节。一个字节,在十六进制表示法中是两位数字,所以你一次向后读两位小的endian十六进制数,得到大端的十六进制数

    所以偏移量是16进制的0x38f36a32,10进制的十进制表示为955476530


    从文件/流中读取,以及在该偏移量处读取,将取决于您的IO库。

    您反转字节,每个字节有两个半字节,而不是在大端和小端之间转换时的半字节。一个半字节=4位,一个字节=8位。因此,小endian版本将是38 f3 6a 32。这是十进制的955476530,这意味着该文件几乎是一个千兆字节。如果您说文件小于8KB,您可能想提供更多信息(例如,您如何知道您得到的十六进制偏移量是有效的?)谢谢您的帮助mipnw和Ross Jacobs。你们两个都是对的,我转换成了小endian错误,这给了我错误的结果。