簡體   English   中英

C二進制文件讀取:我應該移動多少字節?

[英]C Binary File Reading: How many bytes should I move?

假設我有一個使用C語言的二進制文件的程序。

假設我在此二進制文件中有8個對象(每個對象是一個struct記錄類型),並且我已經讀取了8個對象的前3個對象。(通過讀取8個對象中的3個對象,我是說我已經讀取並存儲到一個對象中。陣列)

我知道為了以后讀取二進制文件的內容,我必須使用fseek調用來實現這個目標。 我感到困惑的是,假設我想讀取8的第4個對象,我應該使用fseek調用移動/跳過多少個字節/對象?

我應該打電話嗎?

fseek(fp, sizeof(struct record) * 3, SEEK_SET);

要么

fseek(fp, sizeof(struct record) * 4, SEEK_SET);

通常最好先編寫這些內容以了解內存映射的工作原理,讓我們嘗試表示文件(假設每個結構的大小為4個字節):

byte:   |A-0|A-1|A-2|A-3|B-0|B-1|B-2|B-3|C-0|C-1|C-2|C-3|D-0|D-1|D-2|D-3|E....
        ----------------------------------------------------------------------
struct: | struct A      |struct B       |struct C       |struct D       |s...
        ----------------------------------------------------------------------
address:0   1   2   3   4   5   6   7   8   9  10   11  12  13  14  15  16

從視覺表示中可以看到,文件是從0開始的索引,即第一個結構位於地址0 (sizeof(struct record) * 0) ,第二個結構位於地址4 (sizeof(struct record) *1)等等...

從這里可以推導出第n個元素offset = ( sizeof(struct record) * ( n - 1) )

希望它能讓它更清晰......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM