我正在从文件中读取二进制数据,但是一次读取一个字节会得到预期的结果,而一次读取超过一个字节则不会。一次阅读一个:
void readFile(){
std::ifstream in;
in.open("file.bin", std::ios:binary);
uint8_t byte1;
uint8_t byte2;
in.read(reinterpret_cast<char *>(&byte1), sizeof(byte1));
in.read(reinterpret_cast<char *>(&byte2), sizeof(byte2));
std::cout << std::bitset<8>(byte1) << std::bitset<8>(byte2);
}
这会产生预期的输出
0000101000000110
一次读两本:
void readFile(){
std::ifstream in;
in.open("file.bin", std::ios:binary);
uint16_t twobytes;
in.read(reinterpret_cast<char *>(&twobytes), sizeof(twobytes));
std::cout << std::bitset<16>(twobytes);
}
产生意外的输出
0000011000001010
最佳答案
正在正确读取文件。在您的系统上 uint16_t
是小端字节序,即低 8 位存储在第一个字节中,高 8 位存储在第二个字节中,因此从文件中读取的第一个字节变为低位字节位集的 8 位(位 0-7),第二个字节成为高 8 位(位 8-15)。打印 bitset 时,按顺序打印位,从第 15 位到第 0 位。
关于c++ - 二进制文件读取一次读取的字节数不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44549019/