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?