• ベストアンサー

添削おねがいします

初心者ですいませんが添削お願いできますでしょうか? jpegのファイルをバイナリとして表示したいのですができません。 以下のプログラムではどこがだめなんですか? #include<stdio.h> main() { int a[100],i; FILE *fp; fp=fopen("test.jpg","rb"); for(i=1;i<=100;i++){ fscanf(fp,"%x",&a[i]); printf("%x",a[i]); } fclose(fp); }

質問者が選んだベストアンサー

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.2

fscanfはテキストファイルからデータを読み込むための関数ですから、 このようなバイナリーファイルには使えません。 ("%x"は16進数で書かれた「文字列」を読んで整数値にするものです。) いくつかやりかたはありますが、最も単純なのはgetcを使うやり方でしょう。 int c; while((c=getc(fp))!=EOF) { printf("%x",c); } 途中で適当に改行を入れないと見ずらいかも。

jimihenn
質問者

お礼

どうもありがとうございます。 なんとか言われたとうりやってみるとできました。 良い勉強になりました。

その他の回答 (2)

  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.3

fscanf は(おおざっぱに言えば)キャラクタコードを読むためのもので、%x としてもバイナリデータは取り込めません。freadを使いましょう。 また、終了判定がされていません。freadの戻り値で判定してください。詳しくは参考書等に譲ります。

jimihenn
質問者

お礼

どうもありがとうございました。 もう少し勉強してきます。

回答No.1

int a[100] と宣言しているから、a[0]~a[99]が使用できますが、a[100]は使用できません。 for(i=1;i<=100;i++){…} ではなく for(i=0;i<100;i++){…} とすれば良いと思います。

jimihenn
質問者

お礼

どうもありがとうございます。 おっしゃる通りでした。

関連するQ&A