2016-08-14 8 views
-1

Cでファイルを処理する方法を学習しています。バイナリファイルを読み込もうとすると、すべて正常に動作しますが、ガベージ出力が表示されます。Cで一度にバイナリファイルを1フィールド読み込み

は、ここに私のコードです。だから私は、私は複数のfread()を使用する必要があります考えています

FILE *ptr; 
struct file rec; 

ptr=fopen("sample.bin","rb"); 
while(!feof(ptr)) 
{ 
    fread(&rec,sizeof(struct file),1,ptr); 
    printf("%d, %d, %d, %d, %f, %x, %s, %f, %c, %d, %u, %d, %x, %d, %d, %u, %f\n", 
    rec.a, rec.b, rec.c, rec.d, re.e, rec.f,rec.g, rec.h, rec.i, rec.j, rec.k, rec.l,rec.m, rec.n, rec.o, rec.p, rec.q); 
} 

。誰か私にそれを使う方法を教えてもらえますか?

注:これはsample.binがどのように見えるかです:

0000 0000 0101 002f 1000 0000 00f4 0d0a 
4540 8f94 e9ff ffff ffff 636c 6f63 6b00 
00c0 ece0 3b69 b736 a1ea ffff ffff 2700 
0000 0000 8dcb 0cce 0301 7294 cc02 0000 
0000 0000 42bf 
+1

Davidの答えの情報を知る必要があることに加えて、 'return'を' fread'にチェックして、初期化されていない多くのものにアクセスしようとする前に 'printf'にデータがあるかどうかを知る必要がありますまたは 'rec.a、... rec.q'のゴミ値を返します。 –

答えて

0

あなたは魔法によって復号化されるバイナリファイルを期待しています。バイナリファイル形式をバイトレベルで理解し、そのチャンクを読み込み、バイトをデコードし、構造内の値を適切に設定する必要があります。あなたのコードのどこにも、ファイルの各バイトが何を意味しているかを説明するものは何もなく、ファイルを理解するためにはその知識が必要です。

関連する問題