Преобразование шестнадцатеричной строки в 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

для любой заданной строки s:

int(s, 16)

преобразовать шестнадцатеричную строку в 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

пожалуйста, не делай этого!

является ли использование eval в Python плохой практикой?


В 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

с префиксом' 0x ' вы также можете использовать функцию eval

>>a='0xff'
>>eval(a)
255