2017-06-14 1 views
1

Je lis des données binaires à partir d'un fichier, mais lire un octet à la fois donne les résultats attendus, mais pas plus d'un octet à la fois. Lire un à la fois:Le fichier binaire lit des résultats différents pour la quantité d'octets lus à la fois

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); 
} 

Cela produit le résultat attendu de

0000101000000110 

lecture deux à la fois:

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); 
} 

produit une sortie inattendue de

0000011000001010 

Répondre

4

Le fichier est en cours de lecture y. Sur votre système uint16_t est little-endian, c'est à dire que les 8 bits inférieurs sont stockés dans le premier octet et les 8 bits supérieurs sont stockés dans le second octet, ainsi le premier octet lu dans le fichier devient les 8 bits inférieurs du bitset 0-7) et le deuxième octet devient les 8 bits supérieurs (bits 8-15). Lorsque le bitset est imprimé, les bits sont imprimés dans l'ordre, du bit 15 au bit 0.

+0

Oh, bien sûr! L'échange de l'endianness a abouti à la sortie dont j'avais besoin. Merci! – MalusPuer