アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。
以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。

####プログラム####

#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&ordm;?^QI&egrave;&Ccedil;
^A^Dc
^A^D^L<87>
^Y<98>X^?m?;^D&ordm;?^QI0g

酷い文字化けを起こしてしまっています。
解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。

A 回答 (6件)

>バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教示頂きたいです。



「テキストファイルとして扱う」とは、文字化けせずに「視認(出力)できる形」として・・アドバイス。

 ・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 は、どうするのだろう?。
    • good
    • 3

バイナリデータを16進数の文字に変換して表示したいとかでしょうか


とりあえずfgetsは使えません
    • good
    • 1

やりたいことが良くわかりません



>//file.txtはバイナリファイルなのでバイナリモードで開く
は何が入ってるんでしょ?
そもそもバイナリファイルと言っているのは何かのデータ?
それをそのままムリムリ%sではきだしてるから化け化けなのでは?
(吹っ飛ばないだけマシ?)
    • good
    • 0

ただ単に、バイナリの文字列を読み書きしたいということであれば、


バイナリエディタを使えばいいと思います。
「バイナリエディタ」で検索すれば、
フリーソフトが出てくるのでそれを使えば簡単にできます。
    • good
    • 1

ファイルをオープンするときのモードに"t"は使えるんですか?



なお、読んだファイルを「何も加工せずに」そのまま書くだけなら、
ファイルを単にコピーしているのと同じです。
    • good
    • 0

ソースの間違いとか言う以前に、そもそも何を行いたいのでしょうか?


これがわからなければ、アドバイスのしようがありません。
「テキストファイル」も広義としては「バイナリーデータのファイル」ですから、バイナリーファイルといえます。
というか「バイナリー」と「テキスト」の認識が間違っているような……
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A