c++ - 二进制文件读取一次读取的字节数不同的结果

标签 c++ c++11 binaryfiles

我正在从文件中读取二进制数据,但是一次读取一个字节会得到预期的结果,而一次读取超过一个字节则不会。一次阅读一个:

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/

相关文章:

c++ -::myFunction() 是否属于全局命名空间?

c++ - 如果按下 ',',GetAsyncKeyState(188) 不会触发?

c++ - seekp 不去要求的位置

C++ 函数模板 : Derived and explicit return type

c++ - 在不使用 ignore() 的情况下读取二进制文件(C++)时忽略 N 个字节?

linux - 如何在不提取整个文件的情况下更改存档 (.ear) 文件中的文件

C++在传递给类时删除指向指针的指针

c++ - C++11中私有(private)继承聚合类的类的聚合初始化

C++ gcc `floorf` 不是 `std` 的成员?

serialization - 使用 MapReduce 读取/写入二进制输入/输出文件的最佳方式是什么?