Преобразование шестнадцатеричной строки в int в Python
Как преобразовать шестнадцатеричную строку в int в Python?
Я могу иметь это как"0xffff
" или "ffff
".
9 ответов
без префикс 0x, вам нужно указать базу явно, иначе нет никакого способа сказать:
x = int("deadbeef", 16)
С префикс 0x, Python может различать шестнадцатеричный и десятичный автоматически.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(вы должны указать 0
в качестве базы для вызова этого поведения угадывания префикса; опустить второй параметр означает принять base-10.)
int(hexString, 16)
делает трюк и работает с префиксом 0x и без него:
>>> int("a", 16)
10
>>> int("0xa",16)
10
преобразовать шестнадцатеричную строку в int в Python
я могу иметь это как
"0xffff"
или просто"ffff"
.
чтобы преобразовать строку в int, передайте строку в int
вместе с базой, из которой вы конвертируете.
обеих строк будет достаточно для преобразования таким образом:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
Letting 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
пожалуйста, не делай этого!
В 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