gpt4 book ai didi

c++ - 识别字节序相关的问题

转载 作者:太空狗 更新时间:2023-10-29 22:52:51 25 4
gpt4 key购买 nike

我最近了解了字节顺序,但仍然难以确定问题区域。

这是使用从二进制文件(Dxt 纹理)加载的数据的代码片段。我不确定在这种情况下字节顺序是否会导致问题,例如宽度、高度和十六进制比较。我需要更改哪些内容,为什么?

DxtHeader* header = (DxtHeader*)data;
width = header->width;
height = header->height;

uint pixelFormat = header->pixelFormat.fourCC;
if (pixelFormat == 0x31545844){
...
} else if (pixelFormat == 0x33545844){
...
} else if (pixelFormat == 0x35545844){
...
}

最佳答案

一般来说,仅当您的数据通过某些物理接口(interface)(例如通过网络或到文件)传输时,字节顺序才重要,而数据可能源自具有不同 native 字节顺序的平台。如果你试图用指针转换做“聪明”的事情,它也会发生,例如int a = 0xABCD; char b = *(char *)&a;.

从您的示例中并不清楚原始数据的来源,但我假设它是从文件或某处读取的。确实,处理字节顺序转换的最佳位置是尽可能靠近接口(interface),因此在您的情况下,读取文件并填充结构的例程。通常,这可以通过预处理器 #ifdefs 解决,例如在 C 中(我知道这是一个 C++ 问题,但我相信你能找到一个合适的等价物):

#ifdef (LITTLE_ENDIAN)
#define FILE_TO_NATIVE_16(x) ((((x) & 0xFF) << 8) | ((x) >> 8))
#else
#define FILE_TO_NATIVE_16(x) (x)
#endif

等等。

如果将转换隔离到接口(interface)例程,则其余代码将与端序无关。

关于c++ - 识别字节序相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549101/

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