Hex: примеры (PYTHON)
hex(number): strОписание функции hex()
Функция hex() в Python применяется для преобразования целого числа в строку, представляющую это число в шестнадцатеричной системе счисления. Она используется, когда требуется получить текстовое шестнадцатеричное представление числовых данных, например, для отладки, вывода информации или взаимодействия с низкоуровневыми системами.
Функция принимает один обязательный аргумент: x - целое число (объект типа int). Любой объект, реализующий метод __index__() и возвращающий целое число, также может быть передан в функцию.
Возвращаемое значение - строка, начинающаяся с префикса 0x, за которым следуют шестнадцатеричные цифры (от 0 до 9 и от a до f в нижнем регистре). Если аргумент не является целым числом Python, вызывается его метод __index__() для получения целого значения перед преобразованием.
Основные примеры использования
Пример с положительным целым числом:
print(hex(255))0xff
Пример с отрицательным целым числом:
print(hex(-42))-0x2a
Пример с нулем:
print(hex(0))0x0
Использование с числом, реализующим метод __index__():
class MyNumber:
def __index__(self):
return 16
print(hex(MyNumber()))0x10
Похожие функции в Python
bin(x)- преобразует целое число в двоичную строку с префиксом '0b'. Предпочтительна для работы с битовыми представлениями.oct(x)- преобразует целое число в восьмеричную строку с префиксом '0o'. Используется для восьмеричных представлений.format(x, 'x')илиf'{x:x}'- предоставляет больше контроля над форматированием (регистр символов, наличие префикса). Используется, когда требуется кастомное форматирование.int(hex_string, 16)- обратное преобразование из шестнадцатеричной строки в целое число.
Аналоги функции в других языках
JavaScript: Метод toString(16) у чисел. Префикс '0x' не добавляется автоматически.
console.log((255).toString(16));ff
PHP: Функция dechex(). Работает только с положительными целыми.
echo dechex(255);ff
Java: Метод Integer.toHexString(). Без префикса.
System.out.println(Integer.toHexString(255));ff
C#: Метод ToString("X") или ToString("x") для управления регистром.
Console.WriteLine(255.ToString("X"));FF
Go: Пакет fmt с форматным спецификатором %x или функция strconv.FormatInt().
fmt.Printf("%x", 255)ff
Kotlin: Метод toString(16).
println(255.toString(16))ff
Типичные ошибки
Передача нецелого числа приводит к TypeError:
print(hex(3.14))TypeError: 'float' object cannot be interpreted as an integer
Попытка преобразования строки, содержащей шестнадцатеричное число, без предварительного приведения к int:
print(hex('ff'))TypeError: 'str' object cannot be interpreted as an integer
Правильный подход: сначала преобразовать строку в int, указав основание системы счисления.
print(hex(int('ff', 16)))0xff
Изменения в последних версиях
В Python 3 основные принципы работы функции hex() остаются неизменными по сравнению с Python 2. В Python 2 функция также возвращала строку с префиксом '0x', но для длинных целых чисел добавлялся суффикс 'L', который был удален в Python 3 после унификации типов целых чисел.
Начиная с Python 3.6, добавлена поддержка подчеркиваний в числовых литералах для удобства чтения, но функция hex() не включает их в вывод.
print(hex(1_000_000))0xf4240
Расширенные примеры использования
Работа с большими целыми числами:
large_num = 2**64
print(hex(large_num))0x10000000000000000
Преобразование списка чисел в шестнадцатеричные представления:
numbers = [0, 15, 255, 4096]
hex_list = [hex(n) for n in numbers]
print(hex_list)['0x0', '0xf', '0xff', '0x1000']
Удаление префикса '0x' из результата:
value = 255
hex_str = hex(value)[2:]
print(hex_str)ff
Использование с регистром символов (дополнительное форматирование через format):
value = 255
print(f'С нижним регистром: {hex(value)}')
print(f'С верхним регистром: {format(value, "#X")}')С нижним регистром: 0xff С верхним регистром: 0XFF
Применение для представления байтов:
byte_data = b'Python'
for byte in byte_data:
print(hex(byte), end=' ')0x50 0x79 0x74 0x68 0x6f 0x6e
Создание кастомного класса с поддержкой преобразования в hex через __index__():
class Color:
def __init__(self, r, g, b):
self.r = r
self.g = g
self.b = b
def __index__(self):
return (self.r << 16) | (self.g << 8) | self.b
c = Color(255, 128, 0)
print(hex(c))0xff8000