2010-04-06 109 views
1

爲什麼這幾行代碼,當我嘗試使用fread(&num, "file path", 1, FILE*);讀取DWORD num = 1880762702我得到result = 10574如果我改變NUM任何其他數字說2880762702才把它的工作原理是行不通的。閱讀DWORD從二進制文件

+0

你提供的代碼甚至不會編譯。請提供完整的代碼片段... – 2010-04-06 07:24:42

+1

你能否澄清一下你的問題。發佈程序的實際代碼,包括代碼中使用的變量的聲明,以及調用fopen()和fclose()。 – 2010-04-06 07:25:45

回答

3

要讀取多字節數量,例如DWORD(這是Win32-對於32位數字),您需要知道endianness。最好一次讀取第一個字節,然後根據文件中使用的字節順序進行轉換。

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

fread()的第二個參數是您想要讀取的數據的大小。在你的情況下,這是sizeof(DWORD)