3 回答

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

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

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
unsigned char a[8];
fread(a,8,1,fp);
然后在對(duì)a的元素按需求處理。
如果聲明成double,必須在寫文件的時(shí)候?qū)懭氲淖兞恳彩莇ouble,用double讀出來(lái)才對(duì)。
寫入字節(jié),用double讀出來(lái)肯定不對(duì),double是浮點(diǎn),不是整數(shù),使用8個(gè)字節(jié)來(lái)存儲(chǔ),1個(gè)符號(hào)位,11位階數(shù),52位尾數(shù)。
- 3 回答
- 0 關(guān)注
- 1061 瀏覽
添加回答
舉報(bào)