gpt4 book ai didi

Python 编码 base64 不期望正确的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 09:27:13 25 4
gpt4 key购买 nike

我正在编写一个 base64 编码方法来将大整数转换为 base64。但是,当我测试我的方法时,我发现结果很奇怪。虽然 encode_b64(int('908540701891980503')) 方法给了我 ybyPRoQW0X,但我希望得到正确的 ybyPRoQWzX

def encode_b64(n):
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
result = []
temp = n
if 0 == temp:
return '0'
else:
while 0 < temp:
idx = temp % 64
result.append(table[idx])
temp /= 64
temp = int(temp)
return ''.join([x for x in reversed(result)])

我检查了好几次,都没有发现逻辑错误。我的代码有什么问题?

最佳答案

您应该在此处使用整数除法,因此temp//= 64 而不是temp/= 64

def encode_b64(n):
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
if not n:
return 'A'
result = []
while n:
result.append(table[n % 64])
<b>n //= 64</b>
return ''.join(reversed(result))

这给了我们:

>>> encode_b64(908540701891980503)
'ybyPRoQWzX'

对于小数字,这不会有什么不同,但大 float 有舍入误差,因此使用 int(..) 可能会得到略有不同的结果。

如果你想进一步优化上面的a,你可以使用位运算,比如:

def encode_b64(n):
table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
if not n:
return 'A'
result = []
while n:
result.append(table[<b>n & 0x3f</b>])
<b>n >>= 6</b>
return ''.join(reversed(result))

关于Python 编码 base64 不期望正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57125398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com