将十六进制转换为整数,“L”字符[重复]

问题描述 投票:0回答:3

我有一个 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'
python
3个回答
4
投票

Python2.x 有 2 类整数(顺便说一句,它们都不是无符号的)。 有一个常见的类

int
,它基于系统的整数概念(通常是 4 字节整数)。 还有任意“精度”类型的整数
long
。 它们在 几乎1 所有情况下的行为都相同,并且
int
对象在溢出时会自动转换为
long
。 不用担心表示中的
L
—— 这只是意味着你的整数对于
int
来说太大了(有溢出),所以 python 自动创建了一个
long
来代替。

还值得指出的是,在 python3.x 中,他们删除了 python2.x 的

int
,转而始终使用
long
。 由于他们现在总是使用
long
,因此他们将其重命名为
int
,因为该名称在代码中更常见。 PEP-237 使这一决定背后更加理性。

1我能想到的唯一一次它们的行为不同是长的

__repr__
在你看到的末尾添加了额外的
L


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'

1
投票

你不能在整数上调用

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

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

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

>>> int(c)
18446744071331087936L
© www.soinside.com 2019 - 2024. All rights reserved.