为什么我在 Python 中收到溢出错误?
Why am I getting an overflowerror in Python?
这是我的代码
J = random.randrange(400000000000000000, 800000000000000000)
K = codecs.encode(J.to_bytes(2, 'big'), "base64")
但是我在尝试 运行 时遇到溢出错误...
基本上我生成了一个介于 400000000000000000 和 800000000000000000 之间的数字,并将其转换为 base64。如果有人能帮忙,那就太好了,谢谢
正如你所说,问题是溢出:
import random, codecs
J = random.randrange(400000000000000000, 800000000000000000)
K = codecs.encode(J.to_bytes(2, 'big'), "base64")
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# OverflowError: int too big to convert
问题是你在J.to_bytes(2, 'big')
中没有给他足够的字节数。如果您检查下面的 table,您会看到要表示数字那么大,您需要 8 个字节来存储它们。
要解决此问题,您需要将 to_bytes
函数中的 2
字节替换为 8
:
J.to_bytes(8, 'big')
这是以字节(2^ 位)为单位的每种大小的可能性数组。
Bytes
Possibilities
1
256
2
65 536
4
4 294 967 296
7
72 057 594 037 927 900
8
18 446 744 073 709 600 000
Wanted:
800 000 000 000 000 000
请注意,如果字节表示是有符号的,则最大数除以 2,因为 1 位用于符号 (+/-)。因此,如果您要存储的数字是 200
作为 signed int
,则需要 2 个字节(-128 到 +127)而不是一个字节,如果它是 unsigned int
(0 到255).
这是我的代码
J = random.randrange(400000000000000000, 800000000000000000)
K = codecs.encode(J.to_bytes(2, 'big'), "base64")
但是我在尝试 运行 时遇到溢出错误... 基本上我生成了一个介于 400000000000000000 和 800000000000000000 之间的数字,并将其转换为 base64。如果有人能帮忙,那就太好了,谢谢
正如你所说,问题是溢出:
import random, codecs
J = random.randrange(400000000000000000, 800000000000000000)
K = codecs.encode(J.to_bytes(2, 'big'), "base64")
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# OverflowError: int too big to convert
问题是你在J.to_bytes(2, 'big')
中没有给他足够的字节数。如果您检查下面的 table,您会看到要表示数字那么大,您需要 8 个字节来存储它们。
要解决此问题,您需要将 to_bytes
函数中的 2
字节替换为 8
:
J.to_bytes(8, 'big')
这是以字节(2^ 位)为单位的每种大小的可能性数组。
Bytes | Possibilities |
---|---|
1 | 256 |
2 | 65 536 |
4 | 4 294 967 296 |
7 | 72 057 594 037 927 900 |
8 | 18 446 744 073 709 600 000 |
Wanted: | 800 000 000 000 000 000 |
请注意,如果字节表示是有符号的,则最大数除以 2,因为 1 位用于符号 (+/-)。因此,如果您要存储的数字是 200
作为 signed int
,则需要 2 个字节(-128 到 +127)而不是一个字节,如果它是 unsigned int
(0 到255).