#python #hex
#python #шестнадцатеричное
Вопрос:
Рассмотрим целое число 2. Я хочу преобразовать его в шестнадцатеричную строку ‘0x02’. Используя встроенную функцию Python hex()
, я могу получить ‘0x2’, который не подходит для моего кода. Кто-нибудь может показать мне, как получить то, что я хочу, удобным способом? Спасибо.
Комментарии:
1. Ваше описание неясно. Если 2 будет 0x02, как насчет 20? Должно ли это быть 0x014?
Ответ №1:
integer = 2
hex_string = '0x{:02x}'.format(integer)
Смотрите pep 3101, особенно стандартные спецификаторы формата для получения дополнительной информации.
Комментарии:
1. Вы можете опустить
0x
и поставить#
на первое место строки формата:'{:#02x}'.format(integer)
. «этот параметр добавляет соответствующий префикс ‘0b’, ‘0o’ или ‘0x’ к выходному значению» (из docs.python.org/3.7/library/string.html )
Ответ №2:
Для целых чисел, которые могут быть очень большими:
integer = 2
hex = integer.to_bytes(((integer.bit_length() 7) // 8),"big").hex()
«Большой» относится к «большому порядковому номеру»… в результате получается строка, которая визуально выровнена так, как ожидал бы человек.
Затем вы можете вставить «0x» спереди, если хотите.
hex = "0x" hex
Комментарии:
1. незначительная ошибка при заключении в квадратные скобки. Должно быть шестнадцатеричным = integer.to_bytes(((integer.bit_length() 7) // 8),» большой»).hex()
2. Пожалуйста, обратите внимание, что ваше решение предназначено только для python3: объект ‘int’ не имеет атрибута ‘to_bytes’.
Ответ №3:
>>> integer = 2
>>> hex_string = format(integer, '#04x') # add 2 to field width for 0x
>>> hex_string
'0x02'
Смотрите Спецификацию формата мини-языка