Python 2.7.11:如何从/十六进制偏移读取(大)二进制文件

时间:2016-03-09 04:42:49

标签: python binary hex hexdump

所以我有一个大的二进制文件(范围从256mb和2gb +,所以内存可能是一个问题),我只想从文件中选择“行”(读取:来自偏移(example of what I'm saying))。

Example file. Image it being much much larger.

假设我只想要偏移量为000000C0的数据。我该怎么做呢?

另一件有用的事情是将数据从某个偏移量读取到文件的末尾/到另一个偏移量。

如果可以的话,我是否也可以从更精确的输入中获得它?例如。 0000007C = 93 F8 43 ...文件的其余部分。

如果我们保持从一个偏移到另一个偏移,0000007C到0000007C = 93。

此外,在这些偏移处写入文件也可能是一个巨大的帮助。

如何保持偏移人类可读(又名,保持类似于00001200或00000070,以及示例)以便将来使用/解剖?

1 个答案:

答案 0 :(得分:1)

您可以使用int(string, base=10)函数将十六进制字符串转换为整数。从那里,使用文件句柄的.seek(offset)来设置你的位置。例如:

def read_from_hex_offset(file, hex_offset):
    """Fetch a single byte (or character) from file at hexadecimal offset hex_offset"""
    offset = int(hex_offset, base=16)
    file.seek(offset)
    return file.read(1)

请注意,二进制文件和文本文件都可以seek,结果会有所不同 - 一个带有read()字节的二进制文件,而一个文本文件将read()一个字符串并尝试处理编码。对于您的应用,您应该使用二进制模式open()文件:"rb""r+b"