我试图将二进制文件读入无符号32位整数数组。但是,我遇到了一些字节序问题,因为我的输入在8位组中被反转(例如0x65206669
成为0x69662065
)。这是我阅读文件的方式:
std::ifstream input;
input.open(filename.c_str(), std::ios::in | std::ios::binary);
if (!input.is_open()) return false;
uint32_t buffer[262144];
input.read((char*)buffer, 1048576);
我是否需要转换缓冲区的endian,还是有一些函数可以将二进制文件读入整数?
答案 0 :(得分:0)
二进制文件表示多字节类型,例如32位int
,其方式通常特定于生成它们的体系结构。虽然从二进制文件中读取int
将产生与写入同一台机器上的文件相同的数字,但读取其他机器生成的文件可能会给您不正确的结果。
看起来您正在阅读的文件是在具有相反字节顺序的计算机上生成的。如果您计划仅在计算机上阅读这些文件,则可以编写一个简单的函数来交换字节顺序。如果您打算创建独立于体系结构的二进制文件,则应选择一个字节顺序(例如,网络顺序,也称为“big-endian”),然后使用byte reordering routines specific to your system。