Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将十六进制数据写入文件_Python_String_File_Binary_Hex - Fatal编程技术网

Python 将十六进制数据写入文件

Python 将十六进制数据写入文件,python,string,file,binary,hex,Python,String,File,Binary,Hex,我试图将ascii文件中的十六进制数据写入新创建的二进制文件 ascii文件示例: 98 af b7 93 bb 03 bf 8e ae 16 bf 2e 52 43 8b df 4f 4e 5a e4 26 3f ca f7 b1 ab 93 4f 20 bf 0a bf 82 2c dd c5 38 70 17 a0 00 fd 3b fe 3d 53 fc 3b 28 c1 ff 9e a9 28 29 c1 94 d4 54 d4 d4 ff 7b 40 我的代码 hexList =

我试图将ascii文件中的十六进制数据写入新创建的二进制文件

ascii文件示例:

98 af b7 93 bb 03 bf 8e ae 16 bf 2e 52 43 8b df
4f 4e 5a e4 26 3f ca f7 b1 ab 93 4f 20 bf 0a bf
82 2c dd c5 38 70 17 a0 00 fd 3b fe 3d 53 fc 3b
28 c1 ff 9e a9 28 29 c1 94 d4 54 d4 d4 ff 7b 40
我的代码

hexList = []
with open('hexFile.txt', 'r') as hexData:
    line=hexData.readline()
    while line != '':
        line = line.rstrip()
        lineHex = line.split(' ')
        for i in lineHex:
            hexList.append(int(i, 16))
        line = hexData.readline()


with open('test', 'wb') as f:
    for i in hexList:
        f.write(hex(i))
认为
hexList
保存已转换为十六进制的数据,并且
f.write(hex(i))
应该将这些十六进制数据写入文件,但python使用ascii模式写入

最终输出:
0x9f0x2c0x380x590xcd0x110x7c0x590xc90x30xea0x37
这是错误的

问题在哪里?

使用:


替换:

    f.write(hex(i))
与:

或者

解释 注意:

>>> hex(65)
'0x41'
65
应转换为单个字节,但
hex
返回四个字符的字符串<代码>写入将向文件发送所有四个字符

相比之下,在python2中:

>>> chr(65)
'A'
这就是您想要的:
chr
将数字
65
转换为属于二进制文件的字符单字节字符串


在python3中,
chr(i)
bytes((i,)

替换,这在python3.x中不起作用,因为二进制文件写入expect
bytes
bytearray
对象,但是
chr
返回一个
str
对象。@falsetru谢谢。答案现在更新为py2和py3表单。
    f.write(chr(i))  # python 2
    f.write(bytes((i,))) # python 3
>>> hex(65)
'0x41'
>>> chr(65)
'A'