Создать список шестнадцатеричных байтов в Python - PullRequest
0 голосов
/ 14 сентября 2011

Я хочу создать список шестнадцатеричных значений всех 256-байтовых комбинаций.

В принципе, я хочу, например, 'A' => '\ x41'. Я нашел только модули, способные конвертировать 'A' => '41', и это не то, что я хочу.

Как мне решить эту проблему? Кто-нибудь знает соответствующий модуль или алгоритм (как я хотел бы избежать жесткого кодирования 256 шестнадцатеричных значений ...)?

Ответы [ 5 ]

1 голос
/ 14 сентября 2011

ord('A') возвращает значение ASCII в виде целого числа (65 в случае «A»). Вы можете думать о целых числах в любой базе, которую вы хотите. hex(ord('A')) дает вам хорошую строку (в данном случае "0x41"), как и print "%x" % ord('A').

1 голос
/ 14 сентября 2011
>>> hex(ord('A'))
'0x41'

Это то, что вы хотите?

Может быть, как-то так?

for o in range(128):
    print chr(o), hex(o)

Или, может быть

import string
for c in string.printable:
    print c, hex(ord(c))
0 голосов
/ 19 мая 2018

Пытаетесь ли вы печатать b'\x00' вплоть до b'\xff'?Если это так, то я предполагаю, что лучший ответ должен содержать диапазон 256

for o in range(256):
    print(hex(o))
0 голосов
/ 14 сентября 2011

Итак, вы нашли способ сделать для одного символа, давайте просто сделаем это для всех из них в цикле или понимании списка. [(chr(x), '%x' % x) for x in range(256)]

это создаст список с (char, строка со значением в шестнадцатеричном формате). если вы хотите, чтобы значение отображалось как-то иначе, вы можете поиграть со строкой формата, например

>>> 'x%02x' % ord('\r')
'x0d'
0 голосов
/ 14 сентября 2011

Чтобы получить числовое значение каждой буквы верхнего и нижнего регистра ASCII в виде списка:

from string import ascii_letters
[ord(c) for c in ascii_letters]
...