Python, печать Hex удаляет первые 0?

взгляните на это:

fc = '0x'
for i in b[0x15c:0x15f]:
    fc += hex(ord(i))[2:]

Давайте скажем, что этот код нашел hex 00 04 0f, вместо того, чтобы писать его таким образом, он удаляет первое 0 и записывает: 04f любая помощь?

Ответ 1

Это происходит потому, что hex() не будет содержать начальные нули, например:

>>> hex(15)[2:]
'f'

Чтобы убедиться, что вы всегда получаете два символа, вы можете использовать str.zfill(), чтобы добавить нулевой при необходимости:

>>> hex(15)[2:].zfill(2)
'0f'

Вот как это выглядело бы в вашем коде:

fc = '0x'
for i in b[0x15c:0x15f]:
    fc += hex(ord(i))[2:].zfill(2)

Ответ 2

>>> map("{:02x}".format, (10, 13, 15))
['0a', '0d', '0f']

Ответ 3

print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]

используйте строку формата "%2x", чтобы она форматировала ее шириной в 2 символа, а также "%02x" сообщает ей, чтобы она помещалась в 0

обратите внимание, что это все равно удалит ведущее 0 из вещей с более чем двумя шестнадцатеричными значениями например: "0x%02x"%0x0055 => "0x55"

Ответ 4

Это еще только графическое представление для вашего удобства.
Значение фактически не удаляется из данных, оно просто визуально сокращается.

Полное описание здесь и почему это так или почему это не важно: Почему шестнадцатеричные числа с префиксом 0x?