我可以创建适用于不同字节序的颜色结构吗?

问题描述 投票:0回答:1

我正在尝试创建一个联合来同时存储逐个通道的颜色值和 4 字节值。但我在频道顺序方面遇到问题。不同的字节序机器给出不同的值。有什么方法可以创建此结构的字节序证明版本,或者当不同的字节序更适合这项工作时使用不同的结构?我想将结构和联合用于教育目的。我正在尝试并想了解 C 结构可以做什么和不能做什么。

typedef union u_color
{
    struct
    {
        unsigned char   blue;
        unsigned char   green;
        unsigned char   red;
        unsigned char   alpha;
    };
    unsigned int    value;
}   t_color;
c struct colors endianness unions
1个回答
1
投票

如果您只想使用它来获取和设置

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;

但是对于定义代表真实屏幕数据结构的数组,您需要使用一种预定义的结构布局。

© www.soinside.com 2019 - 2024. All rights reserved.