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)