Преобразование шестнадцатеричной строки в int в Python

Как преобразовать шестнадцатеричную строку в int в Python?

Я могу использовать его как "0xffff" или просто "ffff".

Ответ 1

Без префикса 0x вам нужно явно указать базу, иначе нет способа сказать:

x = int("deadbeef", 16)

С префикс 0x, Python может отличать hex и decimal автоматически.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Вы должны указать 0 в качестве базы, чтобы вызвать это поведение при префикс-угадывании; опускание второго параметра означает, что предполагается base-10.)

Ответ 2

int(hexString, 16) выполняет трюк и работает с префиксом 0x и без него:

>>> int("a", 16)
10
>>> int("0xa",16)
10

Ответ 3

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

int(s, 16)

Ответ 4

Преобразование шестнадцатеричной строки в int в Python

Я могу использовать его как "0xffff" или просто "ffff".

Чтобы преобразовать строку в int, передайте строку в int вместе с базой, из которой вы конвертируете.

Обе строки будут достаточными для преобразования следующим образом:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

Предоставление int infer

Если вы передадите 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 не могут начинаться с числового символа.

Ответ 5

Добавляя к Дану ответ выше: если вы предоставите функцию int() шестнадцатеричной строкой, вам нужно будет указать базу как 16 или она не будет считать, что вы дали ей действительное значение. Задание базы 16 не требуется для шестнадцатеричных чисел, не содержащихся в строках.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid

Ответ 7

Или ast.literal_eval (это безопасно, в отличие от eval):

ast.literal_eval("0xffff")

Демо - версия:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

Ответ 8

Опция форматирования '% 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

Ответ 9

В Python 2.7, int('deadbeef',10), похоже, не работает.

Для меня работает следующее:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0

Ответ 10

Если вы используете интерпретатор python, вы можете просто ввести 0x (ваше шестнадцатеричное значение), и интерпретатор автоматически преобразует его для вас.

>>> 0xffff

65535

Ответ 11

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

Например

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

Ответ 12

Чтобы преобразовать DWORD из шестнадцатеричного числа в целое число со знаком, выполните два дополнения следующим образом:

~ (0xffffffff - int('0xdeadbeef', 16)) + 1