![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?8acaa2e)
こんにちは。
バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。
以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。
####プログラム####
#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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
テキストデータをそのままバイナリへ
C言語・C++・C#
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
テキストデータをバイナリデータに変換したい
C言語・C++・C#
-
-
4
表示イメージのままコピーできるバイナリエディター
その他(ソフトウェア)
-
5
C言語で複数列のデータを1列のみ読み込みたい
C言語・C++・C#
-
6
バイナリデータ→ASCII 変換プログラム
C言語・C++・C#
-
7
Debug Assertion Failed?
C言語・C++・C#
-
8
Cでバイナリデータを変換
C言語・C++・C#
-
9
バイナリファイル中の日本語文字列の取り出し
C言語・C++・C#
-
10
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
11
C言語のポインターに関する警告
C言語・C++・C#
-
12
EXEファイルの解析
その他(コンピューター・テクノロジー)
-
13
C++ 文字列変数と16進数の比較
C言語・C++・C#
-
14
C言語初心者の質問失礼します。
C言語・C++・C#
-
15
メッセージハンドラ
C言語・C++・C#
-
16
C#でバイナリデータをテキストフォームへ表示させるには?
C言語・C++・C#
-
17
VBA バイナリ―から文字列にする方法
Visual Basic(VBA)
-
18
バッファとは何ですか
C言語・C++・C#
-
19
C言語で特定列だけを抽出して配列に格納し、出力したいです。 読み込みファイル(read.txt) 0
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語 2つのファイルを行ご...
-
バイナリファイルをテキストフ...
-
テキストファイルの行数を取得...
-
改行までの一文字ずつのファイ...
-
ファイル読み込みについて
-
VBSで指定行に挿入
-
【VB.Net】バイト型配列に読み...
-
ファイル内のデータを1行削除...
-
ファイルサイズ指定し、ファイ...
-
C言語での改行コードの扱いにつ...
-
C言語初心者の質問失礼します。
-
バッファとは何ですか
-
Access クエリ実行が急に非常に...
-
FTPでputすると空ファイルが出...
-
テキストファイルの最終行を削...
-
GetPrivateProfileStringでini...
-
どんなプログラムを書いても指...
-
csvファイルを開かずに文字を検...
-
Excelマクロでの再読込み方法
-
windows.hがincludeされない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
fgetsで2行目から文字化け
-
VBSで指定行に挿入
-
テキストファイルの行数を取得...
-
c言語 2つのファイルを行ご...
-
改行までの一文字ずつのファイ...
-
freadとfwrite
-
fopenで開いたファイルのサイズ...
-
続・EOF判定されない
-
テキストファイルの文字列の削除
-
巨大なテキストファイル(可変...
-
ファイルサイズ指定し、ファイ...
-
fprintfで出力するファイルのパ...
-
ハフマン符号のプログラム
-
0x00をファイル出力
-
winsock recvでの文字化け
-
VC++6でfgets関数の変わりにな...
-
複数テキストファイルを読み込...
-
C言語でのtxt検索
おすすめ情報