Преобразование шестнадцатеричной строки в целое число в Python
Как преобразовать шестнадцатеричную строку в целое число?
Я пытаюсь конвертировать шестнадцатеричные строки в целые числа, и вот мои примеры:
- "0xffff" должен преобразоваться в 65535
- "ffff" тоже должен преобразоваться в 65535
Как правильно выполнить эту операцию в языке программирования, с которым я работаю? Спасибо!
5 ответ(ов)
Для преобразования шестнадцатеричной строки в целое число в Python можно использовать функцию int()
, указывая основание 16. Это работает как с префиксом 0x
, так и без него. Вот пример:
>>> int("a", 16)
10
>>> int("0xa", 16)
10
Таким образом, и строка "a"
, и строка "0xa"
корректно конвертируются в число 10.
Преобразование шестнадцатеричной строки в целое число в 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 не могут начинаться с числового символа.
Для любой заданной строки s
, если вы хотите преобразовать её из шестнадцатеричного формата в целое число, вы можете использовать встроенную функцию int()
с основанием 16. Например:
result = int(s, 16)
В этом примере, если строка s
содержит допустимые шестнадцатеричные символы (0-9 и a-f или A-F), функция int()
вернёт эквивалентное целое число. Если строка содержит недопустимые символы, будет вызвано исключение ValueError
. Убедитесь, что строка содержит правильные данные перед вызовом функции.
Дополняя ответ Дэна выше: если вы передаете функции int()
шестнадцатеричную строку, вам необходимо указать основание равным 16, иначе она не воспримет это как допустимое значение. Указывать основание 16 не требуется для шестнадцатеричных чисел, которые не являются строками.
print int(0xdeadbeef) # валидно
myHex = "0xdeadbeef"
print int(myHex) # невалидно, вызывает ValueError
print int(myHex, 16) # валидно
Вы можете использовать ast.literal_eval
, чтобы безопасно оценивать строки, представляющие собой литералы Python. В отличие от eval
, использование ast.literal_eval
не вызывает выполнение произвольного кода, что делает его более безопасным вариантом.
Вот пример использования:
import ast
result = ast.literal_eval("0xffff")
print(result) # Вывод: 65535
Как видно из демонстрации, вызов ast.literal_eval("0xffff")
возвращает целое число 65535
, что соответствует шестнадцатеричному значению.
Есть ли в Python метод подстроки 'contains' для строк?
Как удалить пробелы?
Объединение двух столбцов текста в DataFrame pandas
Как получить имя функции в виде строки?
Вывод строки в текстовый файл