Подтвердить что ты не робот

Как разбирать шестнадцатеричный или десятичный int в Python

У меня есть строка, которая может быть шестнадцатеричным числом с префиксом "0x" или десятичным числом без специального префикса, за исключением, возможно, знака минус. "0x123" находится в базе 16, а "-298" находится в базе 10.

Как преобразовать это в int или long в Python?

Я не хочу использовать eval(), так как это небезопасно и overkill.

4b9b3361

Ответ 1

int("0x123", 0)

(почему это не делает int("0x123")?)

Ответ 2

База с 16 по 10 (возвращает целое число):

>>> int('0x123', 16)
291

База 10-16 (верните строку):

>>> hex(291)
'0x123'

Ответ 3

Что-то вроде этого может быть тем, что вы ищете.

def convert( aString ):
    if aString.startswith("0x") or aString.startswith("0X"):
        return int(aString,16)
    elif aString.startswith("0"):
        return int(aString,8)
    else:
        return int(aString)

Ответ 4

Если вы много путешествуете с разными системами счисления, библиотека битовых строк облегчает работу с бинарными/шестнадцатеричными операциями. Он также поддерживает интерпретацию строк:

http://pythonhosted.org/bitstring/

Ответ 5

Это более простая версия, которая работает как шарм. Возвращает строку, так как hex() возвращает тот же тип:

def itoh(int): return hex(int)[2:]