我正在尝试创建一个联合来同时存储逐个通道的颜色值和 4 字节值。但我在频道顺序方面遇到问题。不同的字节序机器给出不同的值。有什么方法可以创建此结构的字节序证明版本,或者当不同的字节序更适合这项工作时使用不同的结构?我想将结构和联合用于教育目的。我正在尝试并想了解 C 结构可以做什么和不能做什么。
typedef union u_color
{
struct
{
unsigned char blue;
unsigned char green;
unsigned char red;
unsigned char alpha;
};
unsigned int value;
} t_color;
如果您只想使用它来获取和设置
value
(或从 value
获取颜色),那么
typedef union u_color
{
#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
struct
{
uint8_t blue;
uint8_t green;
uint8_t red;
uint8_t alpha;
};
#else
struct
{
uint8_t alpha;
uint8_t red;
uint8_t green;
uint8_t blue;
};
#endif
uint32_t value;
} t_color;
但是对于定义代表真实屏幕数据结构的数组,您需要使用一种预定义的结构布局。