我正在读取文件中的二进制数据,但是一次读取一个字节会产生预期的结果,而一次只读取一个字节则不会。一次读一个:
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
答案 0 :(得分:4)
正在正确读取文件。在你的系统上uint16_t
是little-endian,即低8位存储在第一个字节中,高8位存储在第二个字节中,因此从文件读取的第一个字节变为低8位bitset(位0-7)和第二个字节变为高8位(位8-15)。打印位集时,将按顺序打印位,从第15位到第0位。