gpt4 book ai didi

c++ - 是什么让这个代码 "endian independent"?

转载 作者:可可西里 更新时间:2023-11-01 16:30:37 25 4
gpt4 key购买 nike

我遇到了以下代码,并被告知这意味着 COL_8888_RED 是“字节序独立的”。为什么?是什么让这个端独立?(我问过最初的编码员,但他们没有回复我……哎呀,也许他们也不知道。)

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])

最佳答案

从某种意义上说,具有不同字节顺序的平台会给您通过 COL_8888_RED 看到的不同值,此代码不是“字节序无关的”。换句话说,按照对端序依赖性的传统理解,这段代码永远是端序相关的。

另一个问题是应该在哪里使用 COL_8888_RED。也许它打算传递给某些 API,它本身以与 API 的字节序依赖性抵消 COL_8888_RED 的字节序依赖性相同的方式依赖于字节序。在那种情况下,一切都会“按预期”工作,即独立于字节序。 (例如,如果 API 以 uint32 形式接收颜色值,然后使用相同的 union 将其分成 ARGB 组件,则无论字节顺序如何,它都将获得正确的原始 ARGB 值。)

但是,说 COL_8888_RED 的值本身是字节序无关的是完全错误的。

关于c++ - 是什么让这个代码 "endian independent"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3629205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com