将hex转换为int,即'L'字符

时间:2013-05-29 17:40:14

标签: python

我有一个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 个答案:

答案 0 :(得分:4)

Python2.x有两类整数(它们都不是无符号btw)。通常的类int基于系统的整数概念(通常是4字节整数)。还有任意“精度”类型的整数long。它们在几乎 1 的所有情况下都表现相同,如果int个对象溢出,它们会自动转换为long。不要担心表示中的L - 它只是意味着你的整数对于int来说太大了(有一个溢出)所以python会自动创建一个long

值得指出的是,在python3.x中,他们删除了python2.x的int,转而使用long。由于他们现在总是使用long,因此他们将其重命名为int,因为该名称在代码中更为常见。 PEP-237让这个决定更加理性。

1 我们能想到的唯一一次他们的行为方式就是长__repr__会在您看到的末尾添加额外的L。功能

答案 1 :(得分: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'

答案 2 :(得分:1)

你不能在一个整数上调用rstrip,你必须在整数的字符串表示上调用它。

>>> a = "ffffffff723b8640"
>>> b = int(a,16)
>>> c = repr(b).rstrip("L")
>>> c
'18446744071331087936'

但请注意,这只会用于显示数字或其他内容。将字符串转换回整数将再次附加“L”:

>>> int(c)
18446744071331087936L