假设我有一个整数,13941412,我希望将其分成字节(该数字实际上是0x00bbggrr形式的颜色)。你会怎么做?在c中,您将数字转换为BYTE然后移位。你如何在Python中转换为byte?
答案 0 :(得分:13)
使用按位数学运算符,“字节”已经存在:
def int_to_rgb(n):
b = (n & 0xff0000) >> 16
g = (n & 0x00ff00) >> 8
r = (n & 0x0000ff)
return (r, g, b)
答案 1 :(得分:2)
您可以使用0xff按位&
来获取第一个字节,然后移位8位并重复以获取其他3个字节。
编辑:对于颜色,您知道需要最不重要的三个字节。所以,你可以使用更好的方法:
r = num & 0x0000ff
g = (num & 0x00ff00) >> 8
b = (num & 0xff0000) >> 16
答案 2 :(得分:0)
这是一个适用于任何语言的优化建议,并且不会损害易读性。
而不是:
b = (n & 0xff0000) >> 16
g = (n & 0xff00) >> 8
r = (n & 0xff)
使用它:
b = (n >> 16) & 0xff
g = (n >> 8) & 0xff
r = n & 0xff
有两个原因:
拥有更少的常数并不慢,而且可能更快。
具有较小的常数并不慢,并且可能更快 - 在像C这样的语言中,可以使用更短的机器指令;在像Python这样的语言中,实现可能会聚集小整数。