C++ 以DWORD格式设置特定字节

C++ 以DWORD格式设置特定字节,c++,C++,如何在4字节长度的DWORD变量中设置特定字节 DWORD color_argb; unsigned char a = 11; // first byte unsigned char r = 22; // second byte unsigned char g = 33; // third byte unsigned char b = 44; // fouth byte zumalifeguard,如果我理解正确-我可以使用下一个宏: #define SET_COLOR_A(color, a)

如何在4字节长度的DWORD变量中设置特定字节

DWORD color_argb;
unsigned char a = 11; // first byte
unsigned char r = 22; // second byte
unsigned char g = 33; // third byte
unsigned char b = 44; // fouth byte
zumalifeguard,如果我理解正确-我可以使用下一个宏:

#define SET_COLOR_A(color, a) color |= (a << 24)
#define SET_COLOR_R(color, r) color |= (r << 16)
#define SET_COLOR_G(color, g) color |= (g << 8)
#define SET_COLOR_B(color, b) color |= (b << 0)

?请尝试以下宏:

#define SET_COLOR_A(color, a) color = (DWORD(color) & 0x00FFFFFF) | ((DWORD(a) & 0xFF) << 24)
#define SET_COLOR_R(color, r) color = (DWORD(color) & 0xFF00FFFF) | ((DWORD(r) & 0xFF) << 16)
#define SET_COLOR_G(color, g) color = (DWORD(color) & 0xFFFF00FF) | ((DWORD(g) & 0xFF) << 8)
#define SET_COLOR_B(color, b) color = (DWORD(color) & 0xFFFFFF00) | (DWORD(b) & 0xFF)

重要的是保留未被操纵的现有位,同时删除正在被替换的现有位。如果分配给的位置中已经存在位,则仅输入或输入新位是不够的。

请尝试以下宏:

#define SET_COLOR_A(color, a) color = (DWORD(color) & 0x00FFFFFF) | ((DWORD(a) & 0xFF) << 24)
#define SET_COLOR_R(color, r) color = (DWORD(color) & 0xFF00FFFF) | ((DWORD(r) & 0xFF) << 16)
#define SET_COLOR_G(color, g) color = (DWORD(color) & 0xFFFF00FF) | ((DWORD(g) & 0xFF) << 8)
#define SET_COLOR_B(color, b) color = (DWORD(color) & 0xFFFFFF00) | (DWORD(b) & 0xFF)

重要的是保留未被操纵的现有位,同时删除正在被替换的现有位。如果分配到的位置中已经存在位,则仅输入或输入新位是不够的。

如果这是Win32 API,则其中三个位将使用RGB宏为您完成。i。E我可以这样通过宏来实现:定义SET_COLOR_Aa一个可能的副本如果这是Win32 API,其中三个是用RGB宏完成的。E我可以这样通过宏来实现:定义集合\颜色\ Aa a