

こんにちは。
バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。
以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。
####プログラム####
#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
酷い文字化けを起こしてしまっています。
解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.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 は、どうするのだろう?。
No.4
- 回答日時:
やりたいことが良くわかりません
>//file.txtはバイナリファイルなのでバイナリモードで開く
は何が入ってるんでしょ?
そもそもバイナリファイルと言っているのは何かのデータ?
それをそのままムリムリ%sではきだしてるから化け化けなのでは?
(吹っ飛ばないだけマシ?)
No.3
- 回答日時:
ただ単に、バイナリの文字列を読み書きしたいということであれば、
バイナリエディタを使えばいいと思います。
「バイナリエディタ」で検索すれば、
フリーソフトが出てくるのでそれを使えば簡単にできます。
No.2
- 回答日時:
ファイルをオープンするときのモードに"t"は使えるんですか?
なお、読んだファイルを「何も加工せずに」そのまま書くだけなら、
ファイルを単にコピーしているのと同じです。
No.1
- 回答日時:
ソースの間違いとか言う以前に、そもそも何を行いたいのでしょうか?
これがわからなければ、アドバイスのしようがありません。
「テキストファイル」も広義としては「バイナリーデータのファイル」ですから、バイナリーファイルといえます。
というか「バイナリー」と「テキスト」の認識が間違っているような……
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/16 14:36
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報