Вопрос-Ответ

Convert hex string to integer in Python

Преобразовать шестнадцатеричную строку в целое число в Python

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

"0xffff"65535
"ffff"65535
Переведено автоматически
Ответ 1

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

x = int("deadbeef", 16)

С префиксом 0x Python может автоматически различать шестнадцатеричную и десятичную системы счисления:

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

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

Ответ 2

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

>>> int("a", 16)
10
>>> int("0xa", 16)
10
Ответ 3

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


У меня это может быть как "0xffff" или просто "ffff".


Чтобы преобразовать строку в int, передайте строку в 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 не могут начинаться с числового символа.

Ответ 4

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

int(s, 16)
python string