<p>这是另一个答案,这次使用了来自<a href="https://www.dlitz.net/software/pycrypto/" rel="nofollow">PyCrypto - The Python Cryptography Toolkit</a>的工业强度实用函数,在版本2.6(当前最新的稳定版本)中,它在<code>pycrypto-2.6/lib/Crypto/Util/number.py</code>中定义。在</p>
<p>前面的评论说:<br/>
<code>Improved conversion functions contributed by Barry Warsaw, after careful benchmarking</code></p>
<pre><code>import struct
def long_to_bytes(n, blocksize=0):
"""long_to_bytes(n:long, blocksize:int) : string
Convert a long integer to a byte string.
If optional blocksize is given and greater than zero, pad the front of the
byte string with binary zeros so that the length is a multiple of
blocksize.
"""
# after much testing, this algorithm was deemed to be the fastest
s = b('')
n = long(n)
pack = struct.pack
while n > 0:
s = pack('>I', n & 0xffffffffL) + s
n = n >> 32
# strip off leading zeros
for i in range(len(s)):
if s[i] != b('\000')[0]:
break
else:
# only happens when n == 0
s = b('\000')
i = 0
s = s[i:]
# add back some pad bytes. this could be done more efficiently w.r.t. the
# de-padding being done above, but sigh...
if blocksize > 0 and len(s) % blocksize:
s = (blocksize - len(s) % blocksize) * b('\000') + s
return s
</code></pre>