2015-03-13 11 views
8

Sto provando a decodificare la stringa esadecimale in valori binari. Ho trovato questo sotto il comando su internet per avere fatto,L'oggetto 'str' non ha attributo 'decode'

string_bin = string_1.decode('hex') 

ma ho ottenuto l'errore dicendo

'str' object has no attrubute 'decode' 

che sto usando Python v3.4.1

risposta

1

Uso binascii:

import binascii 

binary_string = binascii.unhexlify(hex_string) 
9

Non è possibile decodificare gli oggetti stringa; sono già decodificati. Dovrai usare un metodo diverso.

È possibile utilizzare il codecs.decode() function per applicare hex come codec:

>>> import codecs 
>>> codecs.decode('ab', 'hex') 
b'\xab' 

Questo vale un codec Binary transform; è l'equivalente di utilizzare il base64.b16decode() function, con la stringa di input convertito in caratteri maiuscoli:

>>> import base64 
>>> base64.b16decode('AB') 
b'\xab' 

È anche possibile utilizzare il binascii.unhexlify() function per 'decodificare' una sequenza di cifre esadecimali per byte:

>>> import binascii 
>>> binascii.unhexlify('ab') 
b'\xab' 

O modo, otterrete un oggetto bytes.

+0

>>> s = '1bcd67879034' >>> codecs.decode (s, 'hex') b '\ X1B \ xcdg \ x87 \ X904' >>> ######### ########## questo risultato non è previsto: ma è previsto "b '\ x1b \ xcd \ x67 \ x87 \ x90 \ x34'" ## cosa mi manca? – rahookds

+0

@rahookds: sembra corretto. Si noti che una rappresentazione letterale dei byte utilizza solo sequenze di escape '\ xhh' per * byte non stampabili *. '34' è il codice ASCII esadecimale per il carattere' '4'', per esempio. '67' è' 'g''. –

+0

sì! quindi, come faccio a vedere quello che sto cercando? ;-) – rahookds

Problemi correlati