亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c語言中fread函數怎么用?

c語言中fread函數怎么用?

SSM
慕的地10843 2019-02-21 19:15:11
有一個二進制文件,我想把里面的一個八個字節的數讀出來(其實就是1)然后我建立一個int a[];數組,然后調用fread(a,8,1,fp);fp是對應打開文件的指針,怎么就沒讀進去呢?我把數組改成double 后再讀,就能讀進去了,可是讀的不是1,是一個接近0的小數,我就崩潰了,我的問題是,第二個參數,跟第一個參數有關系嗎?八個字節的數到底怎么才能讀出來?跪求高手解答!
查看完整描述

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

查看完整回答
反對 回復 2019-03-26
?
心有法竹

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"了。



查看完整回答
反對 回復 2019-03-26
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

unsigned char a[8];
fread(a,8,1,fp);
然后在對a的元素按需求處理。

如果聲明成double,必須在寫文件的時候寫入的變量也是double,用double讀出來才對。
寫入字節,用double讀出來肯定不對,double是浮點,不是整數,使用8個字節來存儲,1個符號位,11位階數,52位尾數。

查看完整回答
反對 回復 2019-03-26
  • 3 回答
  • 0 關注
  • 1050 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號