好的,我有一种方法很难返回期望的结果。因此,我做出了一个测试结果,并且返回了我未曾期望的结果。
这是一个例子->
int color = 0x00FFFF00;
return 0xFF & (color >> 24) | 0xFF & (color >> 16) | 0xFF & (color >> 8);
据我所知,这应该返回:
0x00FFFF
但是,它实际上返回:
0x0000FF
有人可以解释发生了什么吗?我也想知道如何将32位RGBA整数正确转换为24位RGB整数,谢谢。
最佳答案
尝试这个:
#include <stdio.h>
int main() {
unsigned int x = 0x00FFFF00;
printf("0%8.8x", (x >> 8) & 0x00FFFFFF);
}
$ cc -o shft shft.c
$ ./shft
0x0000ffff
最好将颜色设为
unsigned int
,否则,您可以将符号位从左侧移入,但是在这种情况下,我们将掩盖移位的字节,但是请注意这一点。