gpt4 book ai didi

c++ - 反转内存空间的方向?

转载 作者:行者123 更新时间:2023-11-28 05:13:07 25 4
gpt4 key购买 nike

我正在尝试从文件中读取一些字节。

这是我所做的:

struct HeaderData {
char format[2];
char n_trks[2];
char division[2];
};

HeaderData* header = new HeaderData;

然后,为了直接从文件中获取数据到header,我这样做了

file.read(reinterpret_cast<char*>(header), sizeof(HeaderData))

如果前两个字节是00 06,则header->format[0]会是00header->格式[1] 06。这两个数字组合表示数字 0x0006,十进制为 6,这是所需的值。

当我做类似的事情时

*reinterpret_cast<unsigned*>(header->format) // In this case, the result is 0x0600

它错误地返回了数字 0x0600,因此它似乎反转字节的读取。

我的问题是有什么解决方法可以正确读取无符号数字。

最佳答案

这将是字节顺序不匹配。

当您以这种方式从文件中读入时,字节将按照它们在文件中的确切顺序放入您的结构中。

当您使用unsigned 读取结构时,处理器将按照体系结构要求的任何顺序解释这些字节(大多数是硬编码的,但有些可以设置为任意顺序)。

换句话说

This two numbers combined represent the number 0x0006 which is 6 in decimal.

这不一定是真的。您选择的处理器完全可以将 6 表示为十进制的 0x06 0x00,这将是在 x86 等非常常见的处理器上使用的小端模式。将其表示为 0x00 0x06 将是 big-endian。

正如 M.M 在他的评论中所述,如果您的格式明确地将整数定义为小端,则您应该明确地将其读取为小端,例如format[0] + format[1] * 256,或者定义为big-endian,读作format[0] * 256 + format[1]。不要依赖处理器的字节序来匹配数据的字节序。

关于c++ - 反转内存空间的方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43162582/

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