Python 3.10 二进制拆分脚本(输出不一致)

Python 3.10 Binary splitting script(inconsistent output)

我需要将 .bin 文件拆分成块。但是,在 split/new 二进制文件中写入输出时,我似乎遇到了问题。输出不一致,我可以看到数据,但是在将拆分后的二进制文件与更大的原始二进制文件进行比较时,到处都有移位和间隙。

def hash_file(filename: str, blocksize: int = 4096) -> str:
blocksCount = 0
with open(filename, "rb") as f:
    while True:

        #Read a new chunk from the binary file
        full_string = f.read(blocksize)
        if not full_string:
            break
        new_string = ' '.join('{:02x}'.format(b) for b in full_string)
        split_string = ''.join(chr(int(i, 16)) for i in new_string.split())
        
        #Append the split chunk to the new binary file
        newf = open("SplitBin.bin","a", encoding="utf-8")
        newf.write(split_string)
        newf.close()

        #Check if the desired number of mem blocks has been reached
        blocksCount = blocksCount + 1
        if blocksCount == 1:
            break

对于序号介于 0 和 0x7f 之间的字符,它们的 UTF-8 表示将与其字节值相同。但是对于序数在 0x80 和 0xff 之间的字符,UTF-8 将输出两个字节,这两个字节都不会与输入相同。这就是您看到不一致的原因。

修复它的最简单方法是也以二进制模式打开输出文件。然后就可以把所有的格式化和拆分都去掉了,因为可以直接把刚刚读到的数据写进去:

        with open("SplitBin.bin", "ab") as newf:
            newf.write(full_string)

请注意,每次写入文件时重新打开文件会很慢。最好在完成之前将其打开。