我有一个二进制文件。现在,我试图从特定偏移量写入一些值直到EOF。我写了一个方法,但不知道如何将EOF作为偏移量传递。我试图有一个方法,我可以传递起始偏移量和结束偏移量。在这里,我希望结束偏移可以是地址或EOF。如何将EOF作为偏移传递给我的方法?例如,我的开头是129,结束是EOF或偏移,如1129?
def writeValues(start, end=0):
try:
with open("current.xof", "r+b") as f:
for i in xrange(start, end+1):#write the data
f.seek(i)
f.write("\xAA") #write data
except IOError:
print("Error file not found")
此外,在写入二进制文件时,我最终写入Char值而不是十六进制值。所以要解决这个问题,我尝试了一个解决方案但不满意。我觉得应该有一种更简单的方法。
def updateChecksum(checksum, start, end):
'''update the checksum in bytes start - end'''
checksumList= (' '.join(checksum[i: i+2] for i in xrange(0,len(checksum), 2)))
checksumArr=checksumList.split(" ")
count = start
with open("current.xof", "r+b") as f:
for i in range(0,len(checksumArr)):
f.seek(count)
count = count + 1
f.write('%c' %(int(checksumArr[i], 16)))
答案 0 :(得分:0)
你可以尝试使用end == 0
作为哨兵值,意思是EOF,并自行解释。
def writeValues(start, end=0):
try:
with open("current.xof", "r+b") as f:
for i in xrange(start, end+1):
if i == 0:
f.seek(0, 2) # 2 means seek from EOF
else:
f.seek(i)
f.write("\xAA") #write data
except IOError:
print("Error file not found")
我最终写的是Char值而不是十六进制值。
我不确定这意味着什么。 '\xaa'
应该打印字节0xAA
>>> print '\x21'
!
答案 1 :(得分:0)
我最终修改了下面的代码并使其正常工作。有没有办法改善这个?
def writeValues(start, end=0):
try:
with open("current.xof", "r+b") as f:
if end == 0:
f.seek(0,2)
end_position = f.tell() #get the end position of the file
print(end_position)
for i in xrange(start, end_position+1):
f.seek(i)
f.write("\x00")
except IOError:
print("Error file not found")