整数转换为字节
假设我有一个整数,13941412,我想把它分成几个字节(这个数字实际上是一个颜色,格式是0x00bbggrr)。我该怎么做呢?在C语言中,你可以把这个数字转换成一个字节,然后移动一下位。那在Python中怎么把它转换成字节呢?
3 个回答
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中,通常会把小整数集中管理。
2
你可以用位运算符 &
和 0xff 来获取第一个字节,然后再右移8位,重复这个过程来获取其他三个字节。
补充:对于颜色来说,你只需要最不重要的三个字节。所以,你可以用一种更简单的方法:
r = num & 0x0000ff
g = (num & 0x00ff00) >> 8
b = (num & 0xff0000) >> 16
13
使用位运算符,"字节"已经存在了:
def int_to_rgb(n):
b = (n & 0xff0000) >> 16
g = (n & 0x00ff00) >> 8
r = (n & 0x0000ff)
return (r, g, b)