разбиение строки на список из 2char строк - PullRequest
3 голосов
/ 09 сентября 2011

У меня есть шестнадцатеричный поток, например: 1a2b3c4d5e6f7g, но дольше Я хочу разделить его на шестнадцатеричные шестнадцатеричные значения в списке, а затем преобразовать их в ascii.

Ответы [ 3 ]

5 голосов
/ 09 сентября 2011

Как насчет binascii.unhexlify(hexstr)?
См. Документы для модуля binascii: http://docs.python.org/library/binascii.html

3 голосов
/ 09 сентября 2011

В Python 2.x вы можете использовать binascii.unhexlify:

>>> import binascii
>>> binascii.unhexlify('abcdef0123456789')
'\xab\xcd\xef\x01#Eg\x89'

В Python 3 есть более элегантный метод, использующий только встроенный тип bytes:

>>> bytes.fromhex('abcdef0123456789')
b'\xab\xcd\xef\x01#Eg\x89'
2 голосов
/ 09 сентября 2011

Один лайнер:

a = "1a2b3c"
print ''.join(chr(int(a[i] + a[i+1], 16)) for i in xrange(0, len(a), 2))

Пояснение:

xrange(0, len(a), 2) # gives alternating indecis over the string
a[i] + a[i+1]        # the pair of characters as a string
int(..., 16)         # the string interpreted as a hex number
chr(...)             # the character corresponding to the given hex number
''.join()            # obtain a single string from the sequence of characters
...