Python 3 中的“bytes(n)”函数生成长度为 'n 的字节字符串' 填充空字节,而不是将整数 'n' 转换为其二进制表示形式。这种意外行为的根源在于 Python 3.2 中引入的更改。
要将整数转换为其二进制表示形式,可以使用中引入的“to_bytes”方法Python 3.2。以下示例演示了其用法:
<code class="python">>>> (1024).to_bytes(2, byteorder='big') b'\x04\x00'</code>
或者,您可以实现自己的函数来处理整数到字节的转换:
<code class="python">def int_to_bytes(x: int) -> bytes: return x.to_bytes((x.bit_length() + 7) // 8, 'big') def int_from_bytes(xbytes: bytes) -> int: return int.from_bytes(xbytes, 'big')</code>
'to_bytes' 方法仅支持转换无符号整数。对于有符号整数,位长计算比较复杂:
<code class="python">def int_to_bytes(number: int) -> bytes: return number.to_bytes(length=(8 + (number + (number < 0)).bit_length()) // 8, byteorder='big', signed=True) def int_from_bytes(binary_data: bytes) -> Optional[int]: return int.from_bytes(binary_data, byteorder='big', signed=True)</code>
以上是为什么'bytes(n)”不代表'n”的二进制形式?的详细内容。更多信息请关注PHP中文网其他相关文章!