10

Преобразование шестнадцатеричной строки в целое число в Python

7

Как преобразовать шестнадцатеричную строку в целое число?

Я пытаюсь конвертировать шестнадцатеричные строки в целые числа, и вот мои примеры:

  • "0xffff" должен преобразоваться в 65535
  • "ffff" тоже должен преобразоваться в 65535

Как правильно выполнить эту операцию в языке программирования, с которым я работаю? Спасибо!

5 ответ(ов)

2

Для преобразования шестнадцатеричной строки в целое число в Python можно использовать функцию int(), указывая основание 16. Это работает как с префиксом 0x, так и без него. Вот пример:

>>> int("a", 16)
10
>>> int("0xa", 16)
10

Таким образом, и строка "a", и строка "0xa" корректно конвертируются в число 10.

0

Преобразование шестнадцатеричной строки в целое число в Python

Если у вас есть строка вида "0xffff" или просто "ffff", вы можете преобразовать её в целое число, передав строку в функцию int с указанной системой счисления.

Обе строки подходят для преобразования следующим образом:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

Позволяя int делать вывод

Если вы передадите 0 в качестве основания, функция int сама определит основание из префикса в строке.

>>> int(string_1, 0)
65535

Без шестнадцатеречного префикса 0x функция int не сможет сделать предположение:

>>> int(string_2, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'

Литералы:

Если вы вводите значение в исходный код или в интерпретатор, Python выполнит преобразование за вас:

>>> integer = 0xffff
>>> integer
65535

Это не сработает для ffff, поскольку Python подумает, что вы пытаетесь написать корректное имя переменной:

>>> integer = ffff
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined

Числа в Python должны начинаться с числового символа, в то время как имена в Python не могут начинаться с числового символа.

0

Для любой заданной строки s, если вы хотите преобразовать её из шестнадцатеричного формата в целое число, вы можете использовать встроенную функцию int() с основанием 16. Например:

result = int(s, 16)

В этом примере, если строка s содержит допустимые шестнадцатеричные символы (0-9 и a-f или A-F), функция int() вернёт эквивалентное целое число. Если строка содержит недопустимые символы, будет вызвано исключение ValueError. Убедитесь, что строка содержит правильные данные перед вызовом функции.

0

Дополняя ответ Дэна выше: если вы передаете функции int() шестнадцатеричную строку, вам необходимо указать основание равным 16, иначе она не воспримет это как допустимое значение. Указывать основание 16 не требуется для шестнадцатеричных чисел, которые не являются строками.

print int(0xdeadbeef) # валидно

myHex = "0xdeadbeef"
print int(myHex) # невалидно, вызывает ValueError
print int(myHex, 16) # валидно
0

Вы можете использовать ast.literal_eval, чтобы безопасно оценивать строки, представляющие собой литералы Python. В отличие от eval, использование ast.literal_eval не вызывает выполнение произвольного кода, что делает его более безопасным вариантом.

Вот пример использования:

import ast

result = ast.literal_eval("0xffff")
print(result)  # Вывод: 65535

Как видно из демонстрации, вызов ast.literal_eval("0xffff") возвращает целое число 65535, что соответствует шестнадцатеричному значению.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь