3 回答

TA貢獻1895條經驗 獲得超7個贊
如果你想把這8個字節當成一個數來讀的話可以這樣(在VC環境下)
__int64 a;
fread(&a,sizeof(__int64),1,fp);
如果你想分別讀出這8個字節的話,可以這樣:
char a[8];
fread(a,sizeof(char),8,fp);
希望對你有幫助
__int64也可以用來表示一個整數,只不過它能表示的范圍比int類型的要大,int類型占4個字節,而這個__int64占8個字節。如果你用的是gcc編譯器(像DEV-C等),那應該是long long

TA貢獻1866條經驗 獲得超5個贊
fread
功 能: 從一個流中讀數據
函數原型: size_t fread(void *buffer,size_t size,size_t count,FILE *stream);
參 數:
1.用于接收數據的地址(指針)(buffer)
2.單個元素的大小(size) :單位是字節而不是位,例如讀取一個int型數據就是4個字節
3.元素個數(count)
4.提供數據的文件指針(stream)
返回值:讀取的元素的個數
因為你讀的是二進制文件,你fopen的時候要以fopen(“file”,‘rb’);去讀;fread函數中間的size很關鍵,如果你一次讀size個字節(你那里是8個字節),而你的內容沒有size那么大,就會讀失敗。所以建議讀的時候1個字節1個字節的讀,讀n次。
fread(a,1,n,fp);返回的是讀的元素的次數,即它的個數。
而你的二進制文件是按位算的;int型的數組a來保存“1”,說明你的“1”要占4個字節,“1”的二進制是 0000 0000 0000 0001,所以你讀的時候fread(a,1,4,fp);只能讀4個字節,也就是分4次讀。讀8個字節的結果就不是"1"了。

TA貢獻1829條經驗 獲得超13個贊
unsigned char a[8];
fread(a,8,1,fp);
然后在對a的元素按需求處理。
如果聲明成double,必須在寫文件的時候寫入的變量也是double,用double讀出來才對。
寫入字節,用double讀出來肯定不對,double是浮點,不是整數,使用8個字節來存儲,1個符號位,11位階數,52位尾數。
- 3 回答
- 0 關注
- 1050 瀏覽
添加回答
舉報