内存空间的反转方向?
Invert orientation of memory space?
我正在尝试从文件中读取一些字节。
这是我所做的:
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]
将是00
和header->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]
。不要依赖处理器的字节序恰好与数据的字节序相匹配。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 在命名空间中定义函数还是限定函数
- 使用Unreal C++获取VR耳机的世界位置/方向
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- OpenGL相机和相机空间转型的困惑
- CUDA内核和数学函数的显式命名空间
- 打印第二列时的2d字符矢量打印空间
- 嵌套的匿名命名空间
- 在C++中向零方向近似的最佳方法
- CMakeLists.txt中的命名空间表示法
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- 内存空间的反转方向?
- 将面向方向的(局部空间)照相机投射到全局空间 x-y 平面
- 为什么在分配较大空间时堆地址的增长方向相反?
- 如何生成三维树在任何给定的点和方向的空间与c++和l系统