内存空间的反转方向?

Invert orientation of memory space?

本文关键字:方向 空间 内存      更新时间:2023-10-16

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

这是我所做的:

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->format[1]06。这两个数字组合起来表示以十进制6的数字0x0006,这是所需的值。

当我做类似的事情时

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

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

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

这将是一个字节序不匹配。

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

当你用unsigned从结构中读取时,处理器将按照架构要求它执行的任何顺序解释这些字节(大多数是硬编码的,但有些可以设置为任一顺序)。

或者换一种说法

这两个数字组合起来表示十进制中的数字0x0006 6。

这不一定是真的。您选择的处理器完全允许以十进制表示 6 作为0x06 0x00,这将是在 x86 等非常常见的处理器上使用的小端方案。将其表示为0x00 0x06将是大端序。

正如 M.M 在他的评论中所说,如果你的格式明确地将整数定义为小端序,你应该明确地将其读作小端序,例如format[0] + format[1] * 256,或者如果它被定义为大端序,则应将其读作format[0] * 256 + format[1]。不要依赖处理器的字节序恰好与数据的字节序相匹配。