Преобразование шестнадцатеричной строки в int в Python
Вопрос
Как преобразовать шестнадцатеричную строку в 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"
или просто"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 подумает, что вы вместо этого пытаетесь написать законное имя Python:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
Номера Python начинаются с цифрового символа, а имена Python не могут начинаться с цифрового символа.
Добавление к ответу Дэна выше:если вы предоставите функции int() шестнадцатеричную строку, вам придется указать основание как 16, иначе она не будет считать, что вы дали ей допустимое значение.Указание основания 16 необязательно для шестнадцатеричных чисел, не содержащихся в строках.
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
Худший способ:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
Пожалуйста, не делайте этого!
Или ast.literal_eval
(это безопасно, в отличие от eval
):
ast.literal_eval("0xffff")
Демо:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
В Python 2.7 int('deadbeef',10)
кажется, не работает.
Для меня работает следующее:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
Параметр форматирования '%x'%, похоже, работает и в операторах присваивания.(Предполагая, что 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, вы можете просто ввести 0x (ваше шестнадцатеричное значение), и интерпретатор автоматически преобразует его для вас.
>>> 0xffff
65535
с префиксом «0x» вы также можете использовать функцию eval
Например
>>a='0xff'
>>eval(a)
255