我遇到了以下代码,并被告知这意味着它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
本身的价值与字节无关是完全错误的.
归档时间: |
|
查看次数: |
1577 次 |
最近记录: |