整数到字节转换

时间:2010-04-01 17:29:22

标签: python byte casting

假设我有一个整数,13941412,我希望将其分成字节(该数字实际上是0x00bbggrr形式的颜色)。你会怎么做?在c中,您将数字转换为BYTE然后移位。你如何在Python中转换为byte?

3 个答案:

答案 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这样的语言中,实现可能会聚集小整数。

相关问题