Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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 整数到字节转换_Python_Byte_Casting - Fatal编程技术网

Python 整数到字节转换

Python 整数到字节转换,python,byte,casting,Python,Byte,Casting,假设我有一个整数13941412,我想把它分成字节(这个数字实际上是一种0x00bbggrr格式的颜色)。你会怎么做?在c语言中,将数字强制转换为一个字节,然后移位位。如何在Python中转换为字节?您可以使用0xff按位&获取第一个字节,然后移动8位并重复获取其他3个字节 编辑:对于颜色,您知道需要最小有效的三个字节。因此,您可以使用更好的方法: r = num & 0x0000ff g = (num & 0x00ff00) >> 8 b = (num &

假设我有一个整数13941412,我想把它分成字节(这个数字实际上是一种0x00bbggrr格式的颜色)。你会怎么做?在c语言中,将数字强制转换为一个字节,然后移位位。如何在Python中转换为字节?

您可以使用0xff按位
&
获取第一个字节,然后移动8位并重复获取其他3个字节

编辑:对于颜色,您知道需要最小有效的三个字节。因此,您可以使用更好的方法:

r = num & 0x0000ff
g = (num & 0x00ff00) >> 8
b = (num & 0xff0000) >> 16

使用位数学运算符,“字节”已经存在:

def int_to_rgb(n):
    b = (n & 0xff0000) >> 16
    g = (n & 0x00ff00) >> 8
    r = (n & 0x0000ff)
    return (r, g, b)

这里有一个优化建议,适用于任何语言,并且不会损害易读性

与此相反:

b = (n & 0xff0000) >> 16
g = (n &   0xff00) >> 8
r = (n &     0xff)
使用以下命令:

b = (n >> 16) & 0xff
g = (n >>  8) & 0xff
r =  n        & 0xff
原因有二:

常数越少,速度就越快,而不是越慢


常数越小,速度就越快,而不是越慢——在像C这样的语言中,可以使用更短的机器指令;在Python这样的语言中,实现可能会汇集小整数。

十六进制(13941412)就足够了吗?我想知道每种颜色的数字。hex返回一个str对象。感觉不是最好的。为了只提取每种颜色的字节,使用msw的方法会更简单。我将把这篇文章作为提取字节的一般方法。这样,除第一个字节外的所有字节都变为0。如果我移动它,你需要将中间结果存储在变量中。使用msw的解决方案。由于某些原因,您的建议在我的机器上运行速度比msw慢5%