首页  >  文章  >  后端开发  >  为什么“bytes(n)”不代表“n”的二进制形式?

为什么“bytes(n)”不代表“n”的二进制形式?

Linda Hamilton
Linda Hamilton原创
2024-10-20 14:54:02620浏览

Why Doesn't

为什么“bytes(n)”不代表二进制?

Python 3 中的“bytes(n)”函数生成长度为 'n 的字节字符串' 填充空字节,而不是将整数 'n' 转换为其二进制表示形式。这种意外行为的根源在于 Python 3.2 中引入的更改。

“to_bytes”方法

要将整数转换为其二进制表示形式,可以使用中引入的“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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn