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