こんにちは。
バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。
以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。
####プログラム####
#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も見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
テキストデータをそのままバイナリへ
C言語・C++・C#
-
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
テキストデータをバイナリデータに変換したい
C言語・C++・C#
-
-
4
表示イメージのままコピーできるバイナリエディター
その他(ソフトウェア)
-
5
C#でバイナリデータをテキストフォームへ表示させるには?
C言語・C++・C#
-
6
C言語でテキストファイルをバイナリファイルに変換
C言語・C++・C#
-
7
バイナリデータ→ASCII 変換プログラム
C言語・C++・C#
-
8
【C言語】ファイルを読み込んで16進数で表示する
C言語・C++・C#
-
9
C言語 配列の長さの上限
C言語・C++・C#
-
10
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
-
11
C言語で複数列のデータを1列のみ読み込みたい
C言語・C++・C#
-
12
Cでバイナリデータを変換
C言語・C++・C#
-
13
ファイル出力で改行を入れたい!
C言語・C++・C#
-
14
構造体の中の構造体
C言語・C++・C#
-
15
EXEファイルの解析
その他(コンピューター・テクノロジー)
-
16
バイナリファイル中の日本語文字列の取り出し
C言語・C++・C#
-
17
EBCDIC⇒SJIS変換の方法
その他(プログラミング・Web制作)
-
18
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
19
ソースコードの1行が長いときの折り返し
PHP
-
20
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsで2行目から文字化け
-
ファイル内のデータを1行削除...
-
【C言語】テキスト読み込みの行...
-
巨大なテキストファイル(可変...
-
テキストファイルの行数を取得...
-
バイナリファイルをテキストフ...
-
winsock recvでの文字化け
-
0x00をファイル出力
-
EOF判定されない
-
InternetReadFileで大きいファ...
-
改行までの一文字ずつのファイ...
-
【VB.Net】バイト型配列に読み...
-
c言語 2つのファイルを行ご...
-
C言語初心者の質問失礼します。
-
どんなプログラムを書いても指...
-
バッファとは何ですか
-
フルパスから最後のディレクト...
-
コンパイルするときに、ファイ...
-
FTPでputすると空ファイルが出...
-
OLE又はDDEを使うVISUAL BESIC...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内のデータを1行削除...
-
バイナリファイルをテキストフ...
-
VBSで指定行に挿入
-
fgetsで2行目から文字化け
-
テキストファイルの行数を取得...
-
ファイルサイズ指定し、ファイ...
-
巨大なテキストファイル(可変...
-
【VB.Net】バイト型配列に読み...
-
fopenで開いたファイルのサイズ...
-
改行までの一文字ずつのファイ...
-
freadとfwrite
-
c言語 2つのファイルを行ご...
-
0バイトファイルの作成
-
fopen(書き込みモード)でファイ...
-
テキストファイルの先頭への文...
-
テキストファイルの文字列の削除
-
C言語での採番について
-
VS2010 MFC CStdioFileについて
-
続・EOF判定されない
-
C言語での改行コードの扱いにつ...
おすすめ情報