我知道有很多几乎相同的问题,但似乎没有真正针对一般情况。
所以假设我想打开一个文件,在内存中读取它,可能对相应的位字符串执行一些操作,然后将结果写回文件。
下面是我觉得很简单的,但是它会导致完全不同的输出。请注意,为了简单起见,我只在此处复制文件:file = open('INPUT','rb')
data = file.read()
data_16 = data.encode('hex')
data_2 = bin(int(data_16,16))
OUT = open('OUTPUT','wb')
i = 0
while i < len(data_2) / 8:
byte = int(data_2[i*8 : (i+1)*8], 2)
OUT.write('%c' % byte)
i += 1
OUT.close()
我看了data、data_16和data_2。在我看来,这些转变是有意义的。
正如预期的那样,输出文件的大小与输入文件的大小完全相同。
编辑:我考虑过前导“0b”必须被剪切的可能性。请参见以下内容:>>> data[:100]
'BMFU"\x00\x00\x00\x00\x006\x00\x00\x00(\x00\x00\x00\xe8\x03\x00\x00\xee\x02\x00\x00\x01\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x0b\x00\x00\x12\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05=o\xce\xf4^\x16\xe0\x80\x92\x00\x00\x00\x01I\x02\x1d\xb5\x81\xcaN\xcb\xb8\x91\xc3\xc6T\xef\xcb\xe1j\x06\xc3;\x0c*\xb9Q\xbc\xff\xf6\xff\xff\xf7\xed\xdf'
>>> data_16[:100]
'424d46552200000000003600000028000000e8030000ee020000010018000000000000000000120b0000120b000000000000'
>>> data_2[:100]
'0b10000100100110101000110010101010010001000000000000000000000000000000000000000000011011000000000000'
>>> data_2[1]
'b'
也许BMFU"部分应该从data中切下来?