Comment puis-je écrire une chaîne d'octets dans un fichier, en mode octet, en utilisant python?
J'ai:
['0x28', '0x0', '0x0', '0x0']
Comment écrire 0x28, 0x0, 0x0, 0x0 dans un fichier? Je ne sais pas comment transformer cette chaîne en un octet valide et l'écrire.
Mappez vers un objet bytearray()
ou bytes()
, puis écrivez-le dans le fichier:
with open(outputfilename, 'wb') as output:
output.write(bytearray(int(i, 16) for i in yoursequence))
Une autre option consiste à utiliser la fonction binascii.unhexlify()
pour transformer vos chaînes hexadécimales en valeur bytes
:
from binascii import unhexlify
with open(outputfilename, 'wb') as output:
output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b)))
Ici, nous devons d'abord couper la partie 0x
, Puis reformater la valeur pour la remplir de zéros et joindre le tout en une seule chaîne.
Dans Python 3.X, bytes()
transformera une séquence entière en une séquence d'octets:
>>> bytes([1,65,2,255])
b'\x01A\x02\xff'
Une expression de générateur peut être utilisée pour convertir votre séquence en entiers (notez que int(x,0)
convertit une chaîne en un entier selon son préfixe. 0x
Sélectionne hex):
>>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
[40, 0, 0, 0]
Les combiner:
>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0'])
b'(\x00\x00\x00'
Et en les écrivant:
>>> L = ['0x28','0x0','0x0','0x0']
>>> with open('out.dat','wb') as f:
... f.write(bytes(int(x,0) for x in L))
...
4