--Fichier texte hexadécimal-> Convertir en fichier binaire
test.txt
1234567890abcdef
↓ Fichier binaire test.bin
Pour python3.2 ou version ultérieure dans cet exemple, utilisez int.to_bytes
python
with open("test.txt") as fin, open("test.bin", "wb") as fout:
s = fin.read()
fout.write(int(s,16).to_bytes(len(s)//2,"big"))
C'est facile à faire.
Ce qui suit est le code quand il correspond même s'il y a des blancs ou des sauts de ligne.
python
import re
with open('test.txt', 'r') as fin:
s = fin.read()
s = re.sub(r'[\r\n\t ]|0x', '', s)
bins = [int(a+b,16) for a, b in zip(s[::2], s[1::2])]
with open('test.bin', 'wb') as fout:
fout.write(bytearray(bins))
s = re.sub(r'[\r\n\t ]|0x', '', s)
Les sauts de ligne / tabulations / espaces demi-largeur et «0x» sont supprimés (remplacés).
bins = [int(a+b,16) for a, b in zip(s[::2], s[1::2])]
Les paires de a et b sont retirées pour former un nombre hexadécimal et mises dans la liste.
Si vous affichez pour a, b dans zip (s [:: 2], s [1 :: 2])
plus en détail, cela fonctionne comme suit.
In [59]: s = "1234567890abcdef"
...: for a, b in zip(s[::2], s[1::2]):
...: print(f"a={a}, b={b}")
a=1, b=2
a=3, b=4
a=5, b=6
a=7, b=8
a=9, b=0
a=a, b=b
a=c, b=d
a=e, b=f
Comme décrit dans le schéma
test2.txt
0x12 0x34 0x56 0x78 0x90
test3.txt
1234
56789
abc
def
Recherchez Stack Overflow en vous référant à la méthode de @ shiracamu en python2. Dans l'ensemble, il semble que python3 puisse être écrit comme suit en utilisant des codecs.
with_codecs.py
import codecs
with open('test.txt', 'r') as fin, open('test.bin', 'wb') as fout:
s = re.sub(r'[\r\n\t ]|0x', '', fin.read())
fout.write(bytearray(codecs.getdecoder("hex_codec")(s)[0])