擅长:python、mysql、java
<p>您应该在这里使用整数除法,所以<code>temp //= 64</code>而不是<code>temp /= 64</code></p>
<pre><code>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))</code></pre>
<p>这给了我们:</p>
<pre><code>>>> encode_b64(908540701891980503)
'ybyPRoQWzX'
</code></pre>
<p>对于小的数字来说,这不会有什么区别,但是大的浮点数有舍入错误,因此使用<code>int(..)</code>可能会得到稍微不同的结果</p>
<p>如果要进一步优化上述a,可以使用位运算,如:</p>
<pre><code>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))</code></pre>