--Hexary Textdatei-> In Binärdatei konvertieren
test.txt
1234567890abcdef
↓ Binärdatei test.bin
Verwenden Sie für Python3.2 oder höher in diesem Beispiel 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"))
Es ist einfach zu machen.
Das Folgende ist der Code, wenn er auch dann entspricht, wenn Leerzeichen oder Zeilenumbrüche vorhanden sind.
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)
Zeilenumbrüche / Tabulatoren / Leerzeichen halber Breite und "0x" werden gelöscht (ersetzt).
bins = [int(a+b,16) for a, b in zip(s[::2], s[1::2])]
Die Paare von a und b werden herausgenommen, um eine Hexadezimalzahl zu bilden, und in die Liste aufgenommen.
Wenn Sie "für a, b in zip (s [:: 2], s [1 :: 2])" etwas detaillierter anzeigen, funktioniert dies wie folgt.
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
Wie in der Gliederung beschrieben
test2.txt
0x12 0x34 0x56 0x78 0x90
test3.txt
1234
56789
abc
def
Search Stack Overflow unter Bezugnahme auf die Methode von @ shiracamu in python2. Insgesamt scheint es, dass Python3 mit Codecs wie folgt geschrieben werden kann.
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])
Recommended Posts