2012-02-16 5 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 

私のシステムは、小エンディアン変換を使用しています。まだ他のバイトは0に設定されていますが、なぜこの出力を得ているのか分かりません。

非常に感謝しています。

+2

これらの関数の戻り値を確認して、成功したことを確認する必要があります。 –

+0

残りのコードを投稿してください。 – mikithskegg

+2

ファイルを「読み取り」モードではなく「追加」モードで開きます。 'fopen'に2番目の引数として" rb "を渡す必要があります! – Gandaro

答えて

1

"ab"オプションでファイルを開きます。このオプションはファイルからの読み込みを許可しないため、書き込みのみが可能です。この方法を開こうとしてください。

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

ありがとう!私は+ bを代わりに使用しましたが、ファイルが存在する場合は切り捨てられません。 – Smokie

関連する問題