Ответ 1
int("0x123", 0)
(почему это не делает int("0x123")
?)
У меня есть строка, которая может быть шестнадцатеричным числом с префиксом "0x" или десятичным числом без специального префикса, за исключением, возможно, знака минус. "0x123" находится в базе 16, а "-298" находится в базе 10.
Как преобразовать это в int или long в Python?
Я не хочу использовать eval(), так как это небезопасно и overkill.
int("0x123", 0)
(почему это не делает int("0x123")
?)
База с 16 по 10 (возвращает целое число):
>>> int('0x123', 16)
291
База 10-16 (верните строку):
>>> hex(291)
'0x123'
Что-то вроде этого может быть тем, что вы ищете.
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)
Если вы много путешествуете с разными системами счисления, библиотека битовых строк облегчает работу с бинарными/шестнадцатеричными операциями. Он также поддерживает интерпретацию строк:
Это более простая версия, которая работает как шарм. Возвращает строку, так как hex() возвращает тот же тип:
def itoh(int): return hex(int)[2:]