是什么让这段代码"endian独立"?

Bee*_*and 9 c c++

我遇到了以下代码,并被告知这意味着它COL_8888_RED是"endian independent".为什么?是什么让这个端点独立?(我问过原来的编码员,但他们没有回复我...... 他们也许也不知道.)

union _colours {
    uint8  c[3][4];
    uint32 alignment;
};

static const union _colours col_8888 = {
        {    /*   B     G     R     A  in memory     */
                {    0x00, 0x00, 0xFF, 0xFF, }, /* red   */
                {    0x00, 0xFF, 0x00, 0xFF, }, /* green */
                {    0xFF, 0x00, 0x00, 0xFF, }, /* blue  */
        }
};

#define COL_8888_RED   *((uint32 *)&col_8888.c[0])
Run Code Online (Sandbox Code Playgroud)

AnT*_*AnT 11

从某种意义上说,这个代码不是"字节序独立的",具有不同字节序的平台将为您提供不同的值COL_8888_RED.换句话说,在对endian-dependency的传统理解中,这个代码依赖于endian依赖.

一个不同的问题是COL_8888_RED应该在哪里使用.也许它的目的是传递给某个API,它本身依赖于字节序依赖于API的字节序依赖性取消了endian依赖性COL_8888_RED.在这种情况下,一切都将"按预期"工作,即以字节顺序独立.(例如,如果API接收颜色值uint32,然后使用相同的联合将其分离为ARGB组件,则无论字节顺序如何,它都将获得正确的原始ARGB值.)

但是,要说它COL_8888_RED本身的价值与字节无关是完全错误的.