2015-09-26 56 views
0

我想使用python脚本对二进制文件进行一些操作。 我有一个二进制文件。我想追加二进制数据。使用python脚本编辑二进制文件

例如:
文件abc.bin可用。

命令:

蟒蛇file_append.py abc.bin 1234 5678

我想追加 “1234” 和 “5678” 的二进制文件abc.bin结束。

所以我用“ab”模式(追加+二进制)打开文件。 当我追加一个命令行参数时,它追加参数的ASCII值。

如何在文件末尾追加十六进制值(这里是1234和5678)?

代码:

fo = open(str(sys.argv[1]), 'ab') 
fv = string.atoi(sys.argv[2]) 
ft = string.atoi(sys.argv[3]) 
fo.write(fv) 
+0

所以你想追加4个字节与六个值12,34,56和78? – ewcz

回答

1

如果要解析命令行参数,它们分成位组,解释那么这些数字作为ASCII六码,并以二进制文件的末尾添加这兴趣,那么你可以做这样的事情

of = open(sys.argv[1], 'ab') 
for arg in sys.argv[2:]: 
    val = int(arg) 
    for b in (val/100, val%100): 
     of.write(chr(int(str(b), base=16))) 

python file_append.py abc.bin 1234 5678然后生成文件abc.bin其可与hexdump -C abc.bin检查其内容显示

00000000 12 34 56 78          |.4Vx| 
00000004 
+0

这不会处理数据包含十六进制数字> 9. –

+0

,它不会,我假设(可能错误地)输入预计是一个十进制整数... – ewcz

+0

公平足够。但是在那种情况下,你的代码仍然是错误的,因为它将'1234'解释为0x1234而不是0x04d2。 –

0

我用下面的代码解决了它。

fo = open(str(sys.argv[1]), 'ab') 
f1 = binascii.a2b_hex(sys.argv[2]) 
fo.write(f1) 
f2 = binascii.a2b_hex(sys.argv[3]) 
fo.write(f2) 
fo.close() 

感谢您的回复。

+0

您可以将数据字符串加入到一个字符串中并将其传递给'a2b_hex',而不是单独转换和写入。然后你的程序可以处理任意数量的数据字符串。例如,'binascii.a2b_hex(''。join(sys.argv [2:]))' –