Python 中的字节对象:超越数字转换
在 Python 中使用字节对象时,必须了解 bytes(n) 是如何转换的函数与数值转换不同。将整数 n 传递给 bytes(n) 不会返回 n 的二进制表示形式,而是创建一个长度为 n 且填充有空字节 (\x00) 的字节字符串。
行为背后的基本原理
此行为是在 Python 3.2 中引入的,作为防止从整数到字节的意外转换的一部分。以前,bytes(n) 会执行未记录的整数到二进制表示形式的转换,从而导致潜在问题。
为了解决这种歧义,bytes(n) 被重新定义以创建一个零填充的字节字符串,确保不会发生隐式转换。需要整数的二进制表示形式的开发人员现在可以显式使用 to_bytes() 方法。
替代解决方案
为了以受控方式将整数转换为字节,Python提供 int.to_bytes() 方法。此方法允许指定字节顺序(“大”或“小端”)以及结果字节字符串的所需长度。
此外,可以创建自定义辅助函数来促进此转换:
def int_to_bytes(number: int) -> bytes:
"""Converts an integer to bytes representing its unsigned value."""
return number.to_bytes(length=(8 (number (number Optional[int]:
"""Converts a byte string to its corresponding signed integer value."""
return int.from_bytes(binary_data, byteorder='big', signed=True)
通过利用这些方法,开发人员可以自信地以符合其特定要求的方式将整数转换为字节。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3