2010-04-06 6 views
1

Pourquoi ces lignes de code ne fonctionne pas lorsque je tente de lire un DWORD num = 1880762702 en utilisant fread(&num, "file path", 1, FILE*); je reçois le result = 10574 si je change le num à tout autre numéro dire 2880762702 seulement alors cela fonctionne.lecture DWORD de fichier binaire

+0

Le code que vous avez fourni ne serait même pas compilé. S'il vous plaît fournir un extrait complet de code ... –

+1

pouvez-vous clarifier votre question un peu s'il vous plaît. postez le code actuel de votre programme, y compris la déclaration des variables utilisées dans votre code, et les appels à fopen() et fclose(). –

Répondre

3

Pour lire une quantité multi-octets telle qu'un DWORD (qui est Win32-parler pour un nombre de 32 bits) vous devez être au courant de endianness. Il est préférable de lire le numéro un octet à la fois et de convertir l'ordre des octets utilisé dans le fichier.

FILE *in; 
DWORD num = 0; 

if((fin = fopen("filename.bin", "rb")) != NULL) 
{ 
    unsigned char b0, b1, b2, b3; 

    fread(&b3, sizeof b3, 1, in); 
    fread(&b2, sizeof b2, 1, in); 
    fread(&b1, sizeof b1, 1, in); 
    fread(&b0, sizeof b0, 1, in); 

    // Assuming file is big-endian. 
    // for little endian, swap the order to b0...b3 
    num = (((DWORD) b3) << 24) | (((DWORD) b2) << 16) | (((DWORD) b1) << 8) | b0; 

    fclose(in); 
} 
1

Le second paramètre à fread() est la taille des données que vous voulez lire. Dans votre cas, c'est sizeof(DWORD).

Questions connexes