2012-05-16 10 views
14

Mam ciąg hex jak:hex ciąg znaków w Pythonie

data = "437c2123" 

chcę przekonwertować ten ciąg do sekwencji znaków według tabeli ASCII. Wynik powinien być podobny:

data_con = "C|!#" 

Czy ktoś może mi powiedzieć jak to zrobić?

+1

Dlaczego cytujesz kod C, jeśli jest to pytanie Pythona? A co próbowaliście do tej pory? – unwind

+1

Jaki to jest pyton? : D – jamylak

+1

Po zakończeniu edycji lepiej, możesz zatrzymać głosowanie. – jamylak

Odpowiedz

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|!#' 

tutaj:

  • for i in range(0, len(data), 2) iteracje nad każdą drugą pozycję w data: 0, 2, 4 itp
  • data[i:i+2] patrzy na każdej pary cyfr hex '43', '7c' itp
  • chr(int(..., 16)) konwertuje parę cyfr szesnastkowych do odpowiedniej litery.
  • ''.join(...) łączy znaki w jeden ciąg.
+0

jeśli dane = "aabbccdd", mam na myśli, że konwersja heksadecyma jest ascii niewidzialna, co mam zrobić? czy może zapasy odpowiednich znaków? Nie muszę drukować napisu, ale mam nadzieję, że może on zapełnić odpowiednie wartości. dziękuję u. – Alice

-3

Funkcja ord konwertuje znaki na wartości numeryczne, a funkcja chr działa odwrotnie. Tak aby przekształcić 97 do "a", zrobić ord(97)

+0

'Fałsz', a twoja odpowiedź nie obejmuje wystarczająco dużo, aby można ją było uznać za odpowiedź. 'ord' nie przyjmuje parametru integer. – jamylak

37

W python2

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

W Python3 (działa również w python2 dla < 2.6 nie można mieć b poprzedzając ciąg)

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

Od wersji Python 2.6 można używać prostych:

data_con = bytes.fromhex(data)