首页 > 解决方案 > int.to_bytes 长度计算

问题描述

可能是一个愚蠢的问题,但我偶然发现了 int.to_bytes() 函数,如果我计算字节长度并且文档中没有提示,我无法解释为什么我必须添加“+7”。我确信我错过了一些位/字节计算魔法,但我需要社区的一些帮助。

让我感到困惑的示例:x.to_bytes((x.bit_length() + 7) // 8, byteorder='little')来自https://docs.python.org/3/library/stdtypes.html#int.to_bytes

提前致谢

标签: pythonpython-3.x

解决方案


bit_length返回以二进制表示整数所需的位数,不包括符号和前导零。所以

x.bit_length() + 7) // 8

只会为您提供表示该整数所需的字节x数。你也可以写类似

from math import ceil
ceil(x.bit_length / 8)

得到相同的号码。

该方法to_bytes()需要这个字节长度作为它的第一个参数。为了说明x == 0您可能希望将该案例包括在内:

x.to_bytes(length=(min(x.bit_length(), 1) + 7) // 8, byteorder='little')

推荐阅读