En utilisant les opérateurs sur les bits en C++ pour modifier 4 caractères à int

Ce que je dois faire est d'ouvrir un fichier en mode binaire qui contient des données stockées qui sont destinés à être interprétés comme des nombres entiers. J'ai vu d'autres exemples tels que Stackoverflow-Lecture “integer” taille octets à partir d'un char* tableau. mais je veux essayer de prendre une approche différente (j'ai peut-être juste têtu, ou stupide :/). J'ai d'abord créé un simple fichier binaire dans un éditeur hexadécimal qui se lit comme suit.

00 00 00 47 00 00 00 17 00 00 00 41
Cela (devrait) égal 71, 23 ans, et 65 ans si les 12 octets ont été divisés en 3 entiers.

Après l'ouverture de ce fichier en mode binaire et la lecture de 4 octets dans un tableau de caractères, comment puis-je utiliser les opérations bit à bit pour faire des char[0] bits soit les 8 premiers bits d'un entier (int) et ainsi de suite jusqu'à ce que les bits de chaque char font partie de l'int.

 
My integer = 00        00        00        00  
 +           ^         ^         ^         ^
Chars      Char[0]  Char[1]   Char[2]   Char[3]
             00        00        00        47


So my integer(hex) = 00 00 00 47 = numerical value of 71

Aussi, je ne sais pas comment le boutisme de mon système est en jeu ici, donc, il y a quelque chose que j'ai besoin de garder à l'esprit?

Voici un extrait de code de ce que j'ai à ce jour, je ne sais juste pas les prochaines mesures à prendre.


std::fstream myfile;
    myfile.open("C:\\Users\\Jacob\\Desktop\\hextest.txt", std::ios::in | std::ios::out | std::ios::binary);
    if(myfile.is_open() == false)
    {
        std::cout << "Error" << std::endl;
    }
    char* mychar;
    std::cout << myfile.is_open() << std::endl;
    mychar = new char[4];
    myfile.read(mychar, 4);

Finalement, j'ai un plan sur la façon de traiter avec la lecture de chars à partir d'un fichier et peut-être un type de données personnalisé par la suite, mais d'abord j'ai juste besoin de se familiariser avec l'utilisation des opérations bit à bit.
Merci.

L'entêtement de côté, vous pourriez le faire par la lecture d'un int et l'utilisation de ntohl()
Votre fichier binaire est "big-endian". Donc, tant que vous convertir ses octets pour les entiers dans un big-endian façon, vous n'avez pas besoin de s'inquiéter à propos de l'endianness de l'ordinateur.
...jusqu'à ce que vous déplacez votre code à un autre système, et d'essayer de lire les données à partir d'un big-endian système. Ensuite, vous aurez des problèmes.
Donc David l'appel à ntohl() pour éviter cela

OriginalL'auteur contrapsych | 2011-03-17