Преобразование шестнадцатеричного числа в int, символ 'L'
У меня есть 64-битное шестнадцатеричное число, и я хочу преобразовать его в целое число без знака. я бегу
>>> a = "ffffffff723b8640"
>>> int(a,16)
18446744071331087936L
Так что же такое "L" в конце числа?
Использование следующих команд также не помогает
>>> int(a,16)[:-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'long' object is unsubscriptable
>>> int(a,16).rstrip("L")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'long' object has no attribute 'rstrip'
3 ответа
Вы пытаетесь применить строковые методы к целому числу. Но строковое представление длинного целого не имеет L
в конце:
In [1]: a = "ffffffff723b8640"
In [2]: int(a, 16)
Out[2]: 18446744071331087936L
In [3]: str(int(a, 16))
Out[3]: '18446744071331087936'
__repr__
хотя (как отмечает @mgilson):
In [4]: repr(int(a, 16))
Out[4]: '18446744071331087936L'
In [5]: repr(int(a, 16))[:-1]
Out[5]: '18446744071331087936'
Python2.x имеет 2 класса целых чисел (ни один из них не подписан между прочим). Есть обычный класс int
который основан на концепции целого числа вашей системы (часто 4-байтовое целое). Есть также произвольный тип точности long
, Они ведут себя одинаково почти во всех обстоятельствах и int
объекты автоматически преобразуются в long
если они переполнены. Не беспокойся о L
в представлении - это просто означает, что ваше целое число слишком велико для int
(было переполнение), поэтому Python автоматически создал long
вместо.
Также стоит отметить, что в python3.x они удалили python2.x int
в пользу всегда использовать long
, Так как они теперь всегда используют long
они переименовали его в int
поскольку это имя гораздо чаще встречается в коде. PEP-237 дает более рациональное решение.
1 Единственный раз, когда они ведут себя иначе, о чем я могу думать, __repr__
добавляет, что дополнительный L
на конце, который вы видите.
Ты не можешь позвонить rstrip
для целого числа вы должны вызвать его в строковом представлении целого числа.
>>> a = "ffffffff723b8640"
>>> b = int(a,16)
>>> c = repr(b).rstrip("L")
>>> c
'18446744071331087936'
Обратите внимание, что это будет только для отображения числа или что-то. Превращение строки в целое число снова добавит 'L':
>>> int(c)
18446744071331087936L