使用FILE結構操作二進位制檔案(檔案實訓)

2021-10-05 15:12:54 字數 2850 閱讀 5028

編寫乙個從二進位制檔案中讀取服裝資訊的函式。

開啟檔案

要以二進位制的方式操作檔案,需要首先以二進位制的方式開啟檔案。以二進位制方式開啟檔案只需要在開啟方式中增加字元 b 即可。

例如:

file *fp =

fopen

("a.dat"

,"rb"

);

以上**中檔案的開啟方式為 rb ,字元 r 表示開啟的檔案用於讀,字元 b 表示以二進位制的方式開啟。

讀寫檔案

開啟檔案後依然是檔案讀寫。二進位制檔案的可以使用 fread 和 fwrite 函式。

fwrite 函式

函式 fwrite 的原型為:

size_t fwrite

(const

void

*buffer, size_t size, size_t count, file *stream)

;

size_t 為型別 long 的別名。函式 fwrite 實現把記憶體中從指定位置開始的指定個數的位元組以二進位制的方式寫入檔案。

第乙個引數 buffer 指向記憶體中要寫入檔案的資料的首位址。

第二個引數 size 是要寫入檔案的資料物件的大小,一般使用運算子

sizeof 計算資料物件所佔空間的位元組數。

第三個引數是要寫入的資料物件的個數。

第四個引數是檔案指標,指向要寫入資料的檔案。函式fwrite 可以一次將從 buffer 開始的,size*count 個位元組的資料寫入指標 stream 指向的檔案中。

例如下面的程式可以將乙個整數以二進位制方式寫入檔案:

int n =

100;

file *fp =

fopen

("a.dat"

,"wb");

// 開啟二進位制檔案 a.dat 用於寫

fwrite

(&n,

sizeof

(n),

1,fp)

;// 將 n 以二進位制形式寫入檔案

fread 函式

函式 fread 的原型為:

size_t fread

(void

*buffer, size_t size, size_t count, file *stream)

;

與 fwrite 相反,函式 fread 的作用是從檔案的當前位置讀取指定位元組數的資料放入到記憶體的指定位置。

第乙個引數 buffer指向記憶體中要寫入資料的位置。

函式 fread 的後 3 個引數與函式 fwrite 的後 3個引數的意義相同,給出了要讀取資料物件的位元組數、數目及被讀取的檔案。

函式 fread 可以從指定檔案的當前位置一次性讀取size*count 個位元組的資料並存入 buffer 中。

例如下面的程式可以將檔案 fp 中當前位置的整數以二進位制方式讀出到變數 n 中:

int n;

file *fp =

fopen

("a.dat"

,"wb");

// 開啟二進位制檔案 a.dat 用於寫

fread

(&n,

sizeof

(n),

1,fp)

;

此外,二進位制檔案的讀寫實際上是把資料原封不動的從檔案搬到記憶體,或者從記憶體搬到檔案。這裡的原封不動是指資料的儲存形式,即資料在記憶體中的0|1形式。

而文字檔案的讀寫則不是,需要做一些轉換。

例如把記憶體中的整數12以文字方式寫入檔案,12的儲存格式為00000000 00000000 00000000 00001100,程式需要把這個資料轉換成字串"12"寫入檔案。

關閉檔案

關閉檔案函式和文字檔案的關閉函式的使用事一樣的,都是 fclose 函式。

#include

//宣告結構clothing

struct clothing

;//宣告外部函式,函式readclothing在其它原始檔中實現

extern

intreadclothing

(file *fp, clothing cloth)

;int

main()

fclose

(fp)

;//關閉檔案

//定義服裝資訊陣列

clothing cloth[

100]

;//開啟檔案,以二進位制方式開啟用於讀

fp =

fopen

("a.dat"

,"rb");

//從檔案中讀取服裝資訊到陣列cloth中

n =readclothing

(fp, cloth)

;//關閉檔案

fclose

(fp)

;//輸出服裝資訊

for(i=

0;i)return0;

}

#include

// 結構clothing

struct clothing

;/*

函式readclothing:從檔案fp中讀取服裝資訊到cloth中

引數fp:指向開啟的二進位制檔案,cloth:存放讀出的服裝資訊

返回值:服裝資訊數量

說明:檔案中首先以二進位制方式存入了乙個整數(服裝資訊數n),然後以二進位制方式存入n種服裝資訊(clothing型別)

*/int

readclothing

(file *fp, clothing cloth)

二進位制操作

關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...

6 3 3 使用 shelve 模組操作二進位制檔案

python標準庫shelve也提供了二進位制檔案操作的功能,可以像字典賦值一樣來寫入二進位制檔案,也可以像字典一樣讀取二進位制檔案,有點類似於nosql資料庫mongodb。import shelve fp shelve.open shelve test.dat 建立或開啟二進位制檔案 zhang...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...