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

时间:2017-06-14 15:32:07

标签: 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

1 个答案:

答案 0 :(得分:4)

正在正确读取文件。在你的系统上uint16_t是little-endian,即低8位存储在第一个字节中,高8位存储在第二个字节中,因此从文件读取的第一个字节变为低8位bitset(位0-7)和第二个字节变为高8位(位8-15)。打印位集时,将按顺序打印位,从第15位到第0位。