

こんにちは。
バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。
以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。
####プログラム####
#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も見ています
-
これまでで一番「情けなかったとき」はいつですか?
これまでの人生で一番「情けない」と感じていたときはいつですか? そこからどう変化していきましたか?
-
いちばん失敗した人決定戦
あなたの「告白」での大失敗を教えてください。
-
今の日本に期待することはなんですか?
目まぐるしく、日本も世界も状況が変わる中、あなたが今の日本に期待することはなんですか?
-
AIツールの活用方法を教えて
みなさんは普段どのような場面でAIツール(ChatGPTなど)を活用していますか?
-
集中するためにやっていること
家で仕事をしているのですが、布団をはじめ誘惑だらけでなかなか集中できません。
-
テキストデータをそのままバイナリへ
C言語・C++・C#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
freadとfwrite
C言語・C++・C#
-
-
4
UpdateData( FALSE); による文字列データの表示更新(VC++6.0)
C言語・C++・C#
-
5
テキストデータをバイナリデータに変換したい
C言語・C++・C#
-
6
「識別子がクラス名でも名前空間名でもありません。」と出ます;
C言語・C++・C#
-
7
例外処理のフローチャートの記述方法
C言語・C++・C#
-
8
C言語のポインタに直接アドレスを割り振りしたい
C言語・C++・C#
-
9
バイナリファイルの内容を、そのままテキストファイルに出力する方法
C言語・C++・C#
-
10
Excelでバイナリデータを読み込むことはできますか?
Excel(エクセル)
-
11
memcmp バイナリデータの比較方法
C言語・C++・C#
-
12
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
-
13
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
14
python エラー
その他(プログラミング・Web制作)
-
15
Wordでこのような三角が出てくるようになってしまったのですがどうやったら消せますか?
Word(ワード)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
改行までの一文字ずつのファイ...
-
C言語での改行コードの扱いにつ...
-
ファイルサイズ指定し、ファイ...
-
fopen(ファイルパス)
-
バイナリファイルをテキストフ...
-
複数テキストファイルを読み込...
-
fopen(書き込みモード)でファイ...
-
ハフマン符号のプログラム
-
テキストファイルを分割するプ...
-
C言語のファイル読み込みに関し...
-
EOF判定されない
-
DOSでメモ帳を開いても改行され...
-
winsock recvでの文字化け
-
ファイルポインタが動かない・・・
-
バッファとは何ですか
-
FTPでputすると空ファイルが出...
-
C言語初心者の質問失礼します。
-
Access クエリ実行が急に非常に...
-
絶対パスの絶対て英語で何でし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイナリファイルをテキストフ...
-
EOF判定されない
-
ファイル内のデータを1行削除...
-
巨大なテキストファイル(可変...
-
テキストファイルの行数を取得...
-
fgetsで2行目から文字化け
-
改行までの一文字ずつのファイ...
-
ファイルサイズ指定し、ファイ...
-
c言語 2つのファイルを行ご...
-
0バイトファイルの作成
-
【VB.Net】バイト型配列に読み...
-
fprintfで出力するファイルのパ...
-
VBSで指定行に挿入
-
VS2010 MFC CStdioFileについて
-
複数テキストファイルを読み込...
-
ハフマン符号のプログラム
-
winsock recvでの文字化け
-
freadとfwrite
-
ファイル読み込みについて
-
テキストファイルの文字列の削除
おすすめ情報