0

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

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

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

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

我必须看到 SDL 检查字节序以创建表面,如 man 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);
4

3 回答 3

2

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

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

于 2012-06-05T18:04:46.727 回答
0

除非您以某种方式序列化数据(保存到磁盘,通过网络链接发送)或以整数以外的方式访问它(如 Richard J. Ross III 的回答中提到 a char *),否则没关系。您的变量和掩码具有相同的字节顺序。

于 2012-07-09T20:27:48.547 回答
0

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

于 2012-06-05T18:05:26.600 回答