<p>一种优雅的方法是使用<a href="https://docs.python.org/3/library/struct.html#module-struct" rel="nofollow noreferrer">[Python 3]: struct - Interpret bytes as packed binary data</a>,但是考虑到Python</em>的数字不是固定大小的,则需要一些额外的计算(例如,数字的长度<strong>5</strong>字节)。在</p>
<p>显然,在线转换器对数字的内存表示应用了<em>base64</em>编码,可以通过<a href="https://docs.python.org/3/library/stdtypes.html#int.to_bytes" rel="nofollow noreferrer">[Python 3]: int.<strong>to_bytes</strong>(<em>length, byteorder, *, signed=False</em>)</a>(<strong><em>endianness</em>很重要,在这种情况下,<em>big</em>):</p>
<p>对于反向过程,需要反向步骤。有两种选择:</p>
<ul>
<li>手动完成的事情(这也可以应用于“转发”过程)</li>
<li>使用<code>int.from_bytes</code></li>
</ul>
<blockquote>
<pre class="lang-py prettyprint-override"><code>>>> import base64
>>>
>>> number = 427021005928
>>>
>>> number_bytes = number.to_bytes((number.bit_length() + 7) // 8, byteorder="big") # Here's where the magic happens
>>> number_bytes, number_bytes.decode()
(b'cloth', 'cloth')
>>>
>>> encoded = base64.b64encode(number_bytes)
>>> encoded, encoded.decode() # Don't let yourself tricked by the variable and method names resemblance
(b'Y2xvdGg=', 'Y2xvdGg=')
>>>
>>> # Now, getting the number back
...
>>> decoded = base64.b64decode(encoded)
>>> decoded
b'cloth'
>>>
>>> final_number0 = sum((item * 256 ** idx for idx, item in enumerate(reversed(decoded))))
>>> final_number0
427021005928
>>> number == final_number0
True
>>>
>>> # OR using from_bytes
...
>>> final_number1 = int.from_bytes(decoded, byteorder="big")
>>> final_number1
427021005928
>>> final_number1 == number
True
</code></pre>
</blockquote>
<p>有关按位操作的详细信息,请选中<a href="https://stackoverflow.com/questions/54712872/output-of-crc32b-in-php-is-not-equal-to-python/54713806#54713806">[SO]: Output of crc32b in PHP is not equal to Python (@CristiFati's answer)</a>。在</p>