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
我的系統使用小字節序轉換。但仍然其他字節設置爲零,我不明白爲什麼我得到這個輸出。
一個解釋是非常感謝。
您需要檢查這些函數的返回值以確保它們成功。 – 2012-02-16 21:58:17
發佈代碼的其餘部分。 – mikithskegg 2012-02-16 22:04:10
您正在以「追加」模式打開文件,而不是「讀取」模式。您必須將「rb」作爲第二個參數傳遞給「fopen」! – Gandaro 2012-02-16 22:17:02