2013-04-08 2 views
12

посмотрите на это:Python, печать Hex удаляет первые 0?

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

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

ответ

21

Это происходит потому, что 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) 
+0

'для я в б [0x15c: 0x15f]: \t \t ч = гекс (Ord (я)) [2:] \t \t, если Len (ч) = 2: Н = '0' + Н \t \t к + = h; ' Друг сказал, что это сработает – thethiny

+0

Наконец, правильно объясненный обработанный пример на thi с! – monojohnny

+0

Я бы не сказал, что его правильно объяснили, и я не лучший, чтобы объяснить. Он игнорирует начальные нули, потому что они ничего не значат по отношению к десятичному значению шестнадцатеричных значений. Они указывают количество байтов, которое принимает значение. 15 = f. 0f = 15, потому что 0 + 15 равно 15 –

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

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

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

0

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

Полное описание здесь и почему или почему это не важно: Why are hexadecimal numbers prefixed with 0x?

+1

нет, он удаляется из данных, я попробовал напечатать вывод, и это дает различные значения, 04F является слишком сильно отличается от 00040f – thethiny

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

Это waaaaay больше pythonic, чем самый верный ответ! +1! – Antonvh

Смежные вопросы