我有关于字节序的问题,我喜欢将我的颜色存储为HTML格式(RGB像#aabbcc)。
我总是在我的代码中使用0xaabbcc存储颜色,然后提取红色,绿色和蓝色,我应用这样的掩码:
int color = 0xaabbcc;
int r = color & 0xff0000;
int g = color & 0x00ff00;
int b = color & 0x0000ff;
这种方法效果很好,但我没有在大端机器下测试过,结果会不一样?
我必须看到SDL检查endian以创建表面,如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);
答案 0 :(得分:2)
是。 Bitmasks独立于字节序。如果你将字节序转换为字节数组(或者,在c中为char *
),那么字节序将成为问题的唯一地方就是,在这种情况下,字节顺序很重要。
在使用此代码之前,请确保sizeof(int) > 3
!
答案 1 :(得分:0)
只要您处理实际的个别位,字节顺序无关紧要。在处理位表示的数值时遇到问题。您只需设置一个值,然后使用掩码将其读回,这样您就不会有任何问题。
答案 2 :(得分:0)
除非您以某种方式序列化数据(保存到磁盘,通过网络链接发送)或将其作为整数以外的方式访问(如Richard J. Ross III的答案中提到char *
) ,没关系。您的变量和掩码具有相同的字节顺序。