Преобразование шестнадцатеричного числа в 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
Другие вопросы по тегам