Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python int.to_字节长度计算_Python_Python 3.x - Fatal编程技术网

Python int.to_字节长度计算

Python int.to_字节长度计算,python,python-3.x,Python,Python 3.x,可能是个愚蠢的问题,但我偶然发现了int.to_bytes()函数,我无法解释为什么我必须添加“+7”,如果我计算字节长度,并且文档中没有任何提示。我肯定我错过了一些位/字节计算魔术,但我需要社区的帮助 让我困惑的示例:x.to_字节((x.bit_length()+7)//8,byteorder='little')from 提前感谢bit_length返回用二进制表示整数所需的位数,不包括符号和前导零。所以 x.bit_length() + 7) // 8 将只给出表示该整数x所需的字节数。

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

让我困惑的示例:
x.to_字节((x.bit_length()+7)//8,byteorder='little')
from


提前感谢

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')

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')

一个字节有8位。+7只是确保
/8
四舍五入到最接近的整字节的一种低级方法。@Samwise-这很有意义。我跑
x=10;x、 在python.org上的pythonshell上使用bit_length()
,并获得
4
。有道理,您需要舍入到最接近的整数字节。另一种方法可能是
x.to_字节(math.ceil((x+1)/256),“little”)
。对我来说,只需除以一个完整字节的int值并使用
math.ceil
比使用
bit\u length
并对位数进行模拟要简单一些。@Samwise好的,现在我明白了。我没有想到
/
不是“真正的”部门,而是楼层部门。现在这对我来说很有意义。因为每个人都不知道true和floor division之间的区别:一个字节中有8位。+7只是确保
/8
四舍五入到最接近的整字节的一种低级方法。@Samwise-这很有意义。我跑
x=10;x、 在python.org上的pythonshell上使用bit_length()
,并获得
4
。有道理,您需要舍入到最接近的整数字节。另一种方法可能是
x.to_字节(math.ceil((x+1)/256),“little”)
。对我来说,只需除以一个完整字节的int值并使用
math.ceil
比使用
bit\u length
并对位数进行模拟要简单一些。@Samwise好的,现在我明白了。我没有想到
/
不是“真正的”部门,而是楼层部门。现在这对我来说很有意义。因为每个人都不知道true和floor division之间的区别:你可能想在那里抛出一个
min
min(8,x.bit\u length()+7)
,因为
0
.bit\u length()==0
@Simon Fromme感谢您的解释,但我缺少的链接是
/
切掉了这一点后面的所有内容。您可能想在那里抛出
min
min(8,x.bit_length()+7)
,因为
0
具有
。bit_length()==0
@Simon Fromme感谢您的解释,但我缺少的链接是
/
切断了所有隐藏的内容。