Python 将十六进制转换为int,即“L”字符

Python 将十六进制转换为int,即“L”字符,python,Python,我有一个64位的十六进制数,我想把它转换成无符号整数。我跑 >>> a = "ffffffff723b8640" >>> int(a,16) 18446744071331087936L 那么数字末尾的“L”是什么 使用以下命令也没有帮助 >>> int(a,16)[:-1] Traceback (most recent call last): File "<stdin>", line 1, in <module>

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

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

还值得指出的是,在python3.x中,他们删除了python2.x的int,以支持始终使用long。由于他们现在总是使用long,所以他们将其重命名为int,因为该名称在代码中更为常见。这一决定背后有更多的理性


1我能想到的唯一一次它们的行为有所不同的是,long’s repr’uuuuuuuuuu在您看到的末尾添加了额外的L。

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

还值得指出的是,在python3.x中,他们删除了python2.x的int,以支持始终使用long。由于他们现在总是使用long,所以他们将其重命名为int,因为该名称在代码中更为常见。这一决定背后有更多的理性


1我能想到的唯一一次,它们的行为有所不同的是,long's repr\uuuuuuuuu在您看到的末尾添加了额外的L。

您正在尝试将字符串方法应用于整数。但长整数的字符串表示形式末尾没有L:

In [1]: a = "ffffffff723b8640"

In [2]: int(a, 16)
Out[2]: 18446744071331087936L

In [3]: str(int(a, 16))
Out[3]: '18446744071331087936'
正如@mgilson所指出的那样,报告确实如此:

In [4]: repr(int(a, 16))
Out[4]: '18446744071331087936L'

In [5]: repr(int(a, 16))[:-1]
Out[5]: '18446744071331087936'

您正在尝试将字符串方法应用于整数。但长整数的字符串表示形式末尾没有L:

In [1]: a = "ffffffff723b8640"

In [2]: int(a, 16)
Out[2]: 18446744071331087936L

In [3]: str(int(a, 16))
Out[3]: '18446744071331087936'
正如@mgilson所指出的那样,报告确实如此:

In [4]: repr(int(a, 16))
Out[4]: '18446744071331087936L'

In [5]: repr(int(a, 16))[:-1]
Out[5]: '18446744071331087936'
不能对整数调用rstrip,必须对整数的字符串表示形式调用它

>>> a = "ffffffff723b8640"
>>> b = int(a,16)
>>> c = repr(b).rstrip("L")
>>> c
'18446744071331087936'
但是请注意,这仅用于显示数字或其他内容。将字符串转换回整数将再次附加“L”:

>>> int(c)
18446744071331087936L
不能对整数调用rstrip,必须对整数的字符串表示形式调用它

>>> a = "ffffffff723b8640"
>>> b = int(a,16)
>>> c = repr(b).rstrip("L")
>>> c
'18446744071331087936'
但是请注意,这仅用于显示数字或其他内容。将字符串转换回整数将再次附加“L”:

>>> int(c)
18446744071331087936L

它的意思是长整数。您可以[剥下L][1]。[1] :请查看更新的POSIT表示长整数。您可以[剥下L][1]。[1] :请查看更新后的帖子