为什么我在 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).