我正在编写一个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)])
我检查了好几次,但没有发现逻辑错误。我的代码怎么了
这是典型的整数除法问题
在python2中
temp /= 64
将执行整数除法,因此您的代码可以正常工作。但在python3中,这将导致一个浮动要解决python3中的问题,请将
temp /= 64
更改为temp //= 64
,以强制整数除法并去掉temp = int(temp)
行您应该在这里使用整数除法,所以
temp //= 64
而不是temp /= 64
这给了我们:
对于小的数字来说,这不会有什么区别,但是大的浮点数有舍入错误,因此使用
int(..)
可能会得到稍微不同的结果如果要进一步优化上述a,可以使用位运算,如:
相关问题 更多 >
编程相关推荐