好的,我有一种方法很难返回期望的结果。因此,我做出了一个测试结果,并且返回了我未曾期望的结果。

这是一个例子->

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
否则,您可以将符号位从左侧移入,但是在这种情况下,我们将掩盖移位的字节,但是请注意这一点。

07-28 02:56
查看更多