Hex string для символа в python
У меня есть шестнадцатеричная строка вроде:
data = "437c2123"
Я хочу преобразовать эту строку в последовательность символов в соответствии с таблицей ASCII.
Результат должен выглядеть следующим образом:
data_con = "C|!#"
Может ли кто-нибудь сказать мне, как это сделать?
Ответы
Ответ 1
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|!#'
Здесь:
-
for i in range(0, len(data), 2)
выполняет итерацию по каждой второй позиции в data
: 0
, 2
, 4
и т.д.
-
data[i:i+2]
смотрит на каждую пару шестнадцатеричных цифр '43'
, '7c'
и т.д.
-
chr(int(..., 16))
преобразует пару шестнадцатеричных цифр в соответствующий символ.
-
''.join(...)
объединяет символы в одну строку.
Ответ 2
В Python2
>>> "437c2123".decode('hex')
'C|!#'
В Python3 (также работает в Python2, для < 2.6 у вас не может быть b
префикс строки)
>>> import binascii
>>> binascii.unhexlify(b"437c2123")
b'C|!#'
Ответ 3
Так как Python 2.6 можно использовать просто:
data_con = bytes.fromhex(data)
Ответ 4
Функция ord
преобразует символы в числовые значения, а функция chr
выполняет обратную. Поэтому для преобразования 97
в "a"
выполните ord(97)