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?
Ответ 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)
Ответ 3 print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]] используйте строку формата "%2x", чтобы она форматировала ее шириной в 2 символа, а также "%02x" сообщает ей, чтобы она помещалась в 0 обратите внимание, что это все равно удалит ведущее 0 из вещей с более чем двумя шестнадцатеричными значениями например: "0x%02x"%0x0055 => "0x55"
Ответ 4 Это еще только графическое представление для вашего удобства. Значение фактически не удаляется из данных, оно просто визуально сокращается. Полное описание здесь и почему это так или почему это не важно: Почему шестнадцатеричные числа с префиксом 0x?