- 締切済み
バイナリファイルをテキストファイルに変換する方法を教えて頂けませんか。
こんにちは。 バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。 以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。 ####プログラム#### #include<stdio.h> int main(){ FILE *fp,*fp2; char str[1024]; //file.txtはバイナリファイルなのでバイナリモードで開く if((fp = fopen("file.txt","rb")) == NULL){ printf("file.txt:open error"); exit(-1); } //out.txtはテキストファイルとして保存したいのでテキストモードで開く if((fp2 = fopen("out.txt","at")) == NULL){ printf("out.txt:open error"); exit(-1); } //一行ずつバイナリファイルをテキストファイルにして保存 while((fgets(str,1024,fp)) != NULL){ printf("%s\n",str); fprintf(fp2,"%s\n",str); } fclose(fp); fclose(fp2); return 0; } ####ここまで#### 以下が出力されたテキストファイル(out.txt)です。 ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^Dº?^QIèÇ ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^Dº?^QI0g 酷い文字化けを起こしてしまっています。 解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- yama5140
- ベストアンサー率54% (136/250)
>バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教示頂きたいです。 「テキストファイルとして扱う」とは、文字化けせずに「視認(出力)できる形」として・・アドバイス。 ・1文字8ビットとしてコードは、-128 ~ 127 です。 ・このうち、33 ~ 126 までのみが次に示すとおり、コードと文字に対応があります。 http://e-words.jp/p/r-ascii.html 残るコードは、文字に対応がありません(「文字」として出力できない:32 「空白」は可)。 (これを、文字化けせずに視認できるようにするには) ☆1コードを多文字、例えば「16進2桁」の「2文字分」で、00 ~ 20、7F ~ FF などのように出力します。 なお、「16進2桁」で表現する場合、本来「1文字」で視認できるコードも「16進2桁2文字」にしないと区別ができません。 よって、この方法でテキストファイルにすると、当然ファイル容量はバイナリファイルの2倍になります。 No.3 さんが言われるバイナリエディタは、画面上で、「16進2桁のテキストファイルとして扱う」ことが可能です。 注:文字列変数は、unsigned char str[1024]; としましょう(コードは、0 ~ 255 )。 出力は文字列一括でなく、1コードずつ、"%02X" で・・。 ---------------------------------------------- >//一行ずつバイナリファイルをテキストファイルにして保存 >while((fgets(str,1024,fp)) != NULL){ >printf("%s\n",str); >fprintf(fp2,"%s\n",str); バイナリファイル中にあるだろうコード 0 は、どうするのだろう?。
- php504
- ベストアンサー率42% (926/2160)
バイナリデータを16進数の文字に変換して表示したいとかでしょうか とりあえずfgetsは使えません
- boro-pc
- ベストアンサー率30% (64/208)
やりたいことが良くわかりません >//file.txtはバイナリファイルなのでバイナリモードで開く は何が入ってるんでしょ? そもそもバイナリファイルと言っているのは何かのデータ? それをそのままムリムリ%sではきだしてるから化け化けなのでは? (吹っ飛ばないだけマシ?)
- vani11a
- ベストアンサー率50% (4/8)
ただ単に、バイナリの文字列を読み書きしたいということであれば、 バイナリエディタを使えばいいと思います。 「バイナリエディタ」で検索すれば、 フリーソフトが出てくるのでそれを使えば簡単にできます。
- asuncion
- ベストアンサー率33% (2127/6289)
ファイルをオープンするときのモードに"t"は使えるんですか? なお、読んだファイルを「何も加工せずに」そのまま書くだけなら、 ファイルを単にコピーしているのと同じです。
- arain
- ベストアンサー率27% (292/1049)
ソースの間違いとか言う以前に、そもそも何を行いたいのでしょうか? これがわからなければ、アドバイスのしようがありません。 「テキストファイル」も広義としては「バイナリーデータのファイル」ですから、バイナリーファイルといえます。 というか「バイナリー」と「テキスト」の認識が間違っているような……