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ć?
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ć?
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
itpdata[i:i+2]
patrzy na każdej pary cyfr hex '43'
, '7c'
itpchr(int(..., 16))
konwertuje parę cyfr szesnastkowych do odpowiedniej litery.''.join(...)
łączy znaki w jeden ciąg.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
Funkcja ord
konwertuje znaki na wartości numeryczne, a funkcja chr
działa odwrotnie. Tak aby przekształcić 97
do "a"
, zrobić ord(97)
'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
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|!#'
Od wersji Python 2.6 można używać prostych:
data_con = bytes.fromhex(data)
Dlaczego cytujesz kod C, jeśli jest to pytanie Pythona? A co próbowaliście do tej pory? – unwind
Jaki to jest pyton? : D – jamylak
Po zakończeniu edycji lepiej, możesz zatrzymać głosowanie. – jamylak