2012-05-16 17 views
14

ho una stringa esadecimale come:stringa esadecimale a carattere in python

data = "437c2123" 

voglio convertire questa stringa a una sequenza di caratteri in base alla tabella ASCII. Il risultato dovrebbe essere come:

data_con = "C|!#" 

Qualcuno può dirmi come fare questo?

+1

Perché stai citando il codice C, se questa è una domanda Python? E cosa hai provato finora? – unwind

+1

Quale tipo di pitone è questo? : D – jamylak

+1

Dopo la modifica è meglio, voi ragazzi potete fermare i voti ravvicinati. – jamylak

risposta

18
In [17]: data = "437c2123" 

In [18]: ''.join(chr(int(data[i:i+2], 16)) for i in range(0, len(data), 2)) 
Out[18]: 'C|!#' 

Qui:

  • for i in range(0, len(data), 2) itera su ogni seconda posizione in data: 0, 2, 4 ecc
  • data[i:i+2] guarda ogni coppia di cifre esadecimali '43', '7c', ecc
  • chr(int(..., 16)) converte la coppia di cifre esadecimali nel carattere corrispondente.
  • ''.join(...) unisce i caratteri in una singola stringa.
+0

se data = "aabbccdd", intendo la conversione di hex è ascii invisibile, cosa dovrei fare? può avere i caratteri giusti? non ho bisogno di stampare la stringa, ma spero che possa immagazzinare i valori giusti. grazie – Alice

-3

La funzione ord converte i caratteri in valori numerici e la funzione chr esegue l'inverso. Quindi per convertire 97-"a", fare ord(97)

+0

'False' e ​​la tua risposta non copre abbastanza da essere considerata una risposta. 'ord' non accetta un parametro intero. – jamylak

37

In python2

>>> "437c2123".decode('hex') 
'C|!#' 

In python3 (funziona anche in python2, per < 2.6 non si può avere la b anteponendo la stringa)

>>> import binascii 
>>> binascii.unhexlify(b"437c2123") 
b'C|!#' 
-1

Da Python 2.6 è possibile utilizzare semplicemente:

data_con = bytes.fromhex(data) 
Problemi correlati