我在使用python中的二进制文件时遇到了麻烦。
这是我想要做的: 我有一个二进制文件,我想在其中修改另一个序列。
要替换的序列是'ASBF'。 我想用一个数字代替它。
当我使用python 2.7时,它运行得很好。 但现在在python 3.3中,字节和str之间存在差异,我认为这是我的问题。
这是我正在做的代码:
#that is the number I want to put instead of the hexa sequence
number = 1703518678
#I put it in an array
number_array = []
number_array.append(number & 0xFF)
number_array.append(number >> 8 & 0xFF)
number_array.append(number >> 16 & 0xFF)
number_array.append(number >> 24 & 0xFF)
f = open(fichier_bin, 'rb')
lines = f.readlines()
f.close()
f = open(fichier_bin, 'wb')
for line in lines:
f.write(line.replace('ASBF', struct.pack('BBBB', number_array[0], number_array[1], number_array[2], number_array[3]))) #replace ASBF by the number
f.close()
我尝试了其他的方法解决问题,但我无法弄清楚如何在二进制文件中替换另一个序列。 我希望在hexa中为'ASBF'的41534246成为6589A1D6,在hexa中为1703518678。
修改
这是我得到的错误
f.write(ligne.replace('ASBF', struct.pack('BBBB', number_array[0], number_array[1], number_array[2], number_array[3]))) #replace ASBF by the number
TypeError:预期字节,bytearray或缓冲区兼容对象
我真的不明白如何解决这个问题。
EDIT2: 我得到的问题是我打开文件的方式。 现在我使用而不是仅仅打开,我的程序工作得很好。