使用python脚本编辑二进制文件
我想使用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)
如果要解析命令行参数,它们分成位组,解释那么这些数字作为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
这不会处理数据包含十六进制数字> 9. –
,它不会,我假设(可能错误地)输入预计是一个十进制整数... – ewcz
公平足够。但是在那种情况下,你的代码仍然是错误的,因为它将'1234'解释为0x1234而不是0x04d2。 –
我用下面的代码解决了它。
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()
感谢您的回复。
您可以将数据字符串加入到一个字符串中并将其传递给'a2b_hex',而不是单独转换和写入。然后你的程序可以处理任意数量的数据字符串。例如,'binascii.a2b_hex(''。join(sys.argv [2:]))' –
所以你想追加4个字节与六个值12,34,56和78? – ewcz