2015-11-18 19 views
6

In Python, ho potuto prendere in una stringa di 32 bit, e convertirlo in un numero binario con il codice seguente:Python: Conversione da binario a stringa

def doConvert(string): 
    binary = 0 
    for letter in string: 
     binary <<= 8 
     binary += ord(letter) 

    return binary 

Quindi per la stringa, 'abcd', questo metodo restituirà il valore corretto di 1633837924, tuttavia non riesco a capire come fare il contrario; prendi un numero binario a 32 bit e convertilo in una stringa.

Se qualcuno potesse aiutare, gradirei l'aiuto!

+0

@ shuttle87 sto usando python2 – andrewvincent7

+0

E 'sempre un numero intero a 32 bit? – shuttle87

+0

sì sempre una stringa a 32 bit in fase di conversione. – andrewvincent7

risposta

6

Se siete sempre a che fare con un intero a 32 bit è possibile utilizzare il modulo struct per fare questo:

>>> import struct 
>>> struct.pack(">I", 1633837924) 
'abcd' 

Basta fare in modo che si sta utilizzando la stessa endianness sia per comprimere e decomprimere altrimenti otterrete risultati che sono nell'ordine sbagliato, ad esempio:

>>> struct.pack("<I", 1633837924) 
'dcba' 
+0

Grazie, funziona davvero bene! Cosa fa l'argomento "> I"? Non riesco a trovare una spiegazione ragionevole nei documenti. – andrewvincent7

+0

Il 'I' dice che è un numero intero senza segno. Il '>' dice che è nel formato [big-endian] (https://en.wikipedia.org/wiki/Endianness#Big-endian). – shuttle87

+1

'>>> help (struct)' Il primo carattere opzionale formato indica byte order, dimensione e l'allineamento: @: nativo ordine, formato e l'allineamento (default) =: ordine nativo, std. dimensione e allineamento <: little-endian, std. dimensione e allineamento >: big-endian, std. dimensione e allineamento !: uguale a> –

Problemi correlati