Writing hex data into a file
67,872
Solution 1
Use binascii.unhexlify
:
>>> import binascii
>>> binascii.unhexlify('9f')
'\x9f'
>>> hex(int('9f', 16))
'0x9f'
import binascii
with open('hexFile.txt') as f, open('test', 'wb') as fout:
for line in f:
fout.write(
binascii.unhexlify(''.join(line.split()))
)
Solution 2
replace:
f.write(hex(i))
With:
f.write(chr(i)) # python 2
Or,
f.write(bytes((i,))) # python 3
Explanation
Observe:
>>> hex(65)
'0x41'
65
should translate into a single byte but hex
returns a four character string. write
will send all four characters to the file.
By contrast, in python2:
>>> chr(65)
'A'
This does what you want: chr
converts the number 65
to the character single-byte string which is what belongs in a binary file.
In python3, chr(i)
is replaced by bytes((i,))
.
Author by
Pythonizer
Updated on July 09, 2022Comments
-
Pythonizer almost 2 years
I'm trying to write hex data taken from ascii file to a newly created binary file
ascii file example:
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
my code
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))
Thought
hexList
holds already hex converted data andf.write(hex(i))
should write these hex data into a file, but python writes it with ascii modefinal output:
0x9f0x2c0x380x590xcd0x110x7c0x590xc90x30xea0x37
which is wrong!where is the issue?