[英]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.