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