首页 > 后端开发 > Python教程 > 为什么'bytes(n)”不代表'n”的二进制形式?

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

Linda Hamilton
发布: 2024-10-20 14:54:02
原创
715 人浏览过

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中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板