将二进制文件读取到整数数组

时间:2014-04-18 11:39:11

标签: c++ io binary endianness

我试图将二进制文件读入无符号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,还是有一些函数可以将二进制文件读入整数?

1 个答案:

答案 0 :(得分:0)

二进制文件表示多字节类型,例如32位int,其方式通常特定于生成它们的体系结构。虽然从二进制文件中读取int将产生与写入同一台机器上的文件相同的数字,但读取其他机器生成的文件可能会给您不正确的结果。

看起来您正在阅读的文件是在具有相反字节顺序的计算机上生成的。如果您计划仅在计算机上阅读这些文件,则可以编写一个简单的函数来交换字节顺序。如果您打算创建独立于体系结构的二进制文件,则应选择一个字节顺序(例如,网络顺序,也称为“big-endian”),然后使用byte reordering routines specific to your system