2012-02-16 171 views
0

第一整數具有保持一個二進制文件:閱讀二進制文件

# hexdump file.pak 
0000000 09 00 00 00 
0000004 

試圖用fread結果來閱讀:

int main(void){ 
    char *filename = "file"; 
    FILE *fh = header_open(filename); 
    header_init(fh); 
    header_read_num_files(fh); 
    header_close(fh); 
} 

FILE *header_open(char *pkg_file){ 
    FILE *fh; 
    // open file with binary/read mode                                    
    if ((fh = fopen(pkg_file, "ab")) == NULL){ 
    perror("fopen"); 
    return NULL; // todo: ...                                      
    } 

    return fh; 
} 

int header_read_num_files(FILE *fh){ 
    fseek(fh, 0L, SEEK_SET); 
    char c; 
    fread(&c, sizeof(char), 1, fh); 
    fprintf(stderr,"buff received: %d\n", c); 
} 

/* write first 0 for number of files */ 
void header_init(FILE *fh){ 
    unsigned int x= 9; 
    fseek(fh, 0, SEEK_SET); 
    fwrite((const void*)&x, sizeof(int), 1, fh); 
} 


output: buff received: 112 

我的系統使用小字節序轉換。但仍然其他字節設置爲零,我不明白爲什麼我得到這個輸出。

一個解釋是非常感謝。

+2

您需要檢查這些函數的返回值以確保它們成功。 – 2012-02-16 21:58:17

+0

發佈代碼的其餘部分。 – mikithskegg 2012-02-16 22:04:10

+2

您正在以「追加」模式打開文件,而不是「讀取」模式。您必須將「rb」作爲第二個參數傳遞給「fopen」! – Gandaro 2012-02-16 22:17:02

回答

1

用「ab」選項打開文件。 Bur這個選項不允許從文件讀取,只允許寫入到它的最後。嘗試以這種方式打開

fh = fopen(pkg_file, "w+b") 
+0

謝謝一堆!儘管我使用了a + b,因爲如果它存在的話我的文件不會被截斷。 – Smokie 2012-02-16 22:33:52