用于在 C 中存储颜色的整数,取决于字节序



我有一个关于字节序的问题,我喜欢以HTML格式存储我的颜色(RGB像 #aabbcc 一样)。

我总是在代码中使用0xaabbcc来存储颜色,然后提取红色、绿色和蓝色,我应用如下蒙版:

int color = 0xaabbcc;
int r = color & 0xff0000;
int g = color & 0x00ff00;
int b = color & 0x0000ff;

这很好用,但我还没有在大端机下测试过,结果会一样吗?

我必须看到 SDL 检查字节序以创建表面,如人SDL_CreateRGBSurface示例所示:

#if SDL_BYTEORDER == SDL_BIG_ENDIAN
   rmask = 0xff000000;
   gmask = 0x00ff0000;
   bmask = 0x0000ff00;
   amask = 0x000000ff;
#else
   rmask = 0x000000ff;
   gmask = 0x0000ff00;
   bmask = 0x00ff0000;
   amask = 0xff000000;
#endif
   surface = SDL_CreateRGBSurface(SDL_SWSURFACE, width, height, 32,
                                  rmask, gmask, bmask, amask);

是的。位掩码与字节序无关。字节序唯一会成为问题的地方是,如果您将其转换为字节数组(或者在 c 中为 char *),在这种情况下,字节序很重要。

还要确保在使用此代码之前sizeof(int) > 3

只要您处理的是实际的单个位,字节序就无关紧要。在处理位表示的数值时会遇到问题。您只需设置一个值,然后使用掩码将其读回,因此您应该没有任何问题。

除非你以某种方式序列化数据(保存到磁盘,通过网络链接发送)或将其作为整数以外的其他东西访问(如理查德·罗斯三世的回答提到char *),否则没关系。 变量和掩码具有相同的字节顺序。

相关内容

最新更新