2013-06-27 12 views
12

Come si scrive una stringa di byte in un file, in modalità byte, usando python?Python scrive una stringa di byte nel file

ho:

['0x28', '0x0', '0x0', '0x0'] 

Come faccio a scrivere 0x28, 0x0, 0x0, 0x0 a un file? Non so come trasformare questa stringa in un byte valido e scriverlo.

risposta

12

Mappa per un oggetto bytearray() o bytes(), quindi scrivere che al file:

with open(outputfilename, 'wb') as output: 
    output.write(bytearray(int(i, 16) for i in yoursequence)) 

Un'altra opzione è quella di utilizzare il binascii.unhexlify() function per trasformare le corde hex in un valore bytes:

from binascii import unhexlify 

with open(outputfilename, 'wb') as output: 
    output.write(unhexlify(''.join(format(i[2:], '>02s') for i in b))) 

Qui dobbiamo tagliare prima la parte 0x, quindi riformattare il valore per riempirlo con zeri e unire l'intero in una stringa.

+0

funziona per me – zhaozhi

6

In Python 3.X, bytes() si accende una successione di interi in una sequenza byte:

>>> bytes([1,65,2,255]) 
b'\x01A\x02\xff' 

Un'espressione generatore può essere utilizzata per convertire la sequenza in numeri interi (notare che int(x,0) converte una stringa in un intero . secondo il suo prefisso 0x seleziona esadecimale):

>>> list(int(x,0) for x in ['0x28','0x0','0x0','0x0']) 
[40, 0, 0, 0] 

loro combinazione:

>>> bytes(int(x,0) for x in ['0x28','0x0','0x0','0x0']) 
b'(\x00\x00\x00' 

E li scrivendo:

>>> L = ['0x28','0x0','0x0','0x0'] 
>>> with open('out.dat','wb') as f: 
... f.write(bytes(int(x,0) for x in L)) 
... 
4 
Problemi correlati