整数转换为字节

3 投票
3 回答
7897 浏览
提问于 2025-04-15 21:07

假设我有一个整数,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)

撰写回答