Как преобразовать шестнадцатеричную строку в int в Python?
Я могу иметь его как "0xffff
" или просто "ffff
".
Без префикса 0x, вам нужно явно указать базу, иначе невозможно определить:
x = int("deadbeef", 16)
С префиксом 0x Python может автоматически различать шестнадцатеричные и десятичные числа.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Вы должны указать 0
в качестве основания, чтобы вызвать это поведение угадывания префикса; опущение второго параметра означает принять основание 10).
int(hexString, 16)
делает трюк, и работает как с префиксом 0x, так и без него:
>>> int("a", 16)
10
>>> int("0xa",16)
10
Для любой заданной строки s:
int(s, 16)
преобразовать шестнадцатеричную строку в int в Python
У меня, возможно, это как в
"
или в"порядок" как значение 0xFFFF", у;
.
Чтобы преобразовать строку в int, передать строку в int вместе с базой вы не конверсии.
Обе строки будет достаточно для преобразования следующим образом:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
инт
вывестиЕсли передать 0 в качестве основания инт
будет вывести базы с префиксом в строке.
>>> int(string_1, 0)
65535
Без шестнадцатеричных префикс 0х
, инт
не имеет достаточно информации, чтобы догадаться:
>>> 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
Это выиграл'т работать с порядок
, потому что питон будет думать, что вы'вновь пытается написать законных именем Python вместо:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Python числа должны начинаться с цифры, а имена в Python не может начинаться с цифры.
Добавив к Дэн'ы ответ выше: если функция int() с HEX-строку, вам придется указать основание как 16 или он не будет думать, что вы дали его допустимое значение. Уточнив основание 16 является ненужным для шестнадцатеричных чисел, не содержащихся в строках.
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
Или АСТ.literal_eval (это безопасно, в отличие от функции "eval"):
ast.literal_eval("0xffff")
Демо:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
Худший способ:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
https://stackoverflow.com/questions/1832940/is-using-eval-in-python-a-bad-practice
Если вы используете интерпретатор Python, вы можете просто введите 0x(ваш шестнадцатеричное значение) и интерпретатор преобразует его автоматически для вас.
>>> 0xffff
65535
Возможность форматирования '%х' %, кажется, работает в операторах присваивания, а также для меня. (Предполагая, что в Python 3.0 и выше)
Пример
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
В Python 2.7, как int('deadbeef',10)
Не'т похоже на работу.
Следующие работы для меня:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0