今持っているバイナリファイルfile1.x86をテキストファイルfile1.txtに変換したいんですけどうまくいきません。fopenとfreadでバイナリファイルを読み込むところまで入っていると思うんですけど、テキストファイルとして書き出すことができません。
#include <stdio.h>
main()
{
short a[32000];
FILE *infile, *outfile;
infile = fopen("iroha.x86", "r");
outfile = fopen("iroha.dat", "w+");
fread( a, sizeof(short), 32000, infile );
fwrite( a, sizeof(short), 32000, outfile );
fclose(infile);
fclose(outfile);
}
これだとそのまんま出力されるんです。当たり前なんですけど...
どこをどう変えればいいか教えてください。
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
No.1の補足より
「32000個の符号つき16ビットバイナリデータを32000個の10進数データとしてテキストファイルに書き込む」ということですよね。
#include <stdio.h>
typedef short _s16bit;
int main(void)
{
FILE *fi, *fo;
int i;
_s16bit sh_buf[32000];
fi = fopen("file1.x86", "rb");
fread(sh_buf, sizeof(_s16bit), 32000, fi);
fclose(fi);
fo = fopen("file1.txt", "w");
for (i = 0; i < 32000; i++) {
fprintf(fo, "%-6d%c", sh_buf[i], (i%10==9) ? '\n' : ' ');
}
fclose(fo);
return 0;
}
○_s16bitは、お手持ちの環境に合わせ、符号つき16bitの型にtypedefしてください。(まだたいていの環境では大丈夫だと思いますが)
○エラーチェックは、ご自分の責任において組み込んでください。
○ブラウザ上での見易さを考慮し、全角スペースをふんだんに(笑)使ってあります。行頭は全角SP2個でタブ1つに、シングルクォート内は半角SPに変換してからご利用ください。
注)脳内C/C++のコンパイル確認しかしておりません(笑)
No.3
- 回答日時:
>今持っているバイナリファイルfile1.x86を
>テキストファイルfile1.txtに変換したいんですけど
>うまくいきません。
バイナリファイルfile1.x86の内容が解らないと...
1.ASCIIコード以外のバイナリデータが入っている時の処理方法をどうするのか
2.SJISの漢字コードが入っている時の処理方法をどうするのか
main()
{
char sBuf[32000];
FILE *infile, *outfile;
infile = fopen("iroha.x86", "rb");
outfile = fopen("iroha.dat", "w+");
fread( sBuf, sizeof(sBuf), 32000, infile );
for (int lLoop=0; lLoop<sizeof(sBuf); lLoop++) {
fprintf(outfile,"%c",sBuf(lLoop));
}
fclose(infile);
fclose(outfile);
}
動作未確認
この回答への補足
回答ありがとうございます。
アドバイスいただいたプログラムは
まだ試していないんですけど
僕の質問がよくなかったみたいなので
回答いただいた皆さんに補足させてもらってます。
失礼かもしれませんがbagyoさんの回答のところに
補足を書いておきました。
回答いただいた全員の方に同じ補足を書くのが
いい事なのかわからなかったのでこういう補足
の仕方ですいません。
またアドバイスがあればよろしくお願いします。
No.2
- 回答日時:
疑問の意図がわからないんですけど、
テキストの言葉のつかいかたが明確ではないんですね。
ASCIIで出力したいということか、
\nを付加して出力したいということか考えられるんです。
ちなみに、ASCCIで出力するのなら、bagyoさんの方法で、
%dに変えるんですけど、
文脈どおりに解釈する、とすると、
実際、textとbinneryとの違いというのは機会からは明確ではなくて、
使用者の使い方によるものなんです。
目に見える文字へすべて変換して、最後にラインフィード、改行を入力してあれば、
テキストであるといえます。
よって、#1の回答のとおりで、%dか%ldを使用してください。
この回答への補足
回答ありがとうございます。
たしかにバイナリとテキストという言葉については
ぜんぜん理解できていないので変な質問になってしまいました。
僕の回答が悪かったようなので補足させてください。
失礼かもしれませんがbagyoさんの回答のところに
補足を書いておきました。
回答いただいた全員の方に同じ補足を書くのが
いい事なのかわからなかったのでこういう補足
の仕方ですいません。
またアドバイスがあればよろしくお願いします。
No.1
- 回答日時:
こんにちわ。
コードを読んだ限りでは、複製をしているだけですね。テキストファイルへ変換したいということですが、それは例えば、バイナリエディタのように変換したいということでしょうか?
そうでしたら、おそらく1文字ずつfprintfを利用して変換すればいいと思います。
fprintf(stdout,"%02x",data);
などとやれば、dataが数値で10の場合は、aといった感じで出力されるはずです。(dataはunsigned char型)
この回答への補足
回答ありがとうございました。
僕の質問が悪かったようなので補足させてください。
今持っているデータというのは
音声信号で0.64秒間のデータで32000個の符号つき16ビットの配列です。
で、これがバイナリデータということなんですが、
まずこの信号をプロットしたいというのが目的です。
C言語を使ってやりたいのですが、
まずテキストエディタ(秀丸を使ってます。)で見れて
さらに10進数で表示された状態になれば
Ngraphでプロットできると思って
こんな質問をしたんです。
そもそもぜんぜん違う方法でプロットできるなら
(プログラミング言語はCってことで)
それでもいいです。
こういうことなので何かアドバイスあれば
またよろしくお願いします。
度々すいません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- 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# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セル内の文字列が日本語か英語...
-
EBCDIC⇒SJIS変換の方法
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
Symfowareでのデータ型変換につ...
-
2バイト文字をJEFからSJISに変...
-
COBOLによる全角・半角混...
-
Excel vba で1と10を正確に判断...
-
フォームのコントロールのバッ...
-
共有フォルダ名のパスの取得
-
英数字を含む文字列(0-9,A-Z)...
-
VBScript ASC関数:文字エンコ...
-
ExcelVBA実行後に時々落ちる
-
ExcelからVBAでWordを操作する...
-
文字コードshift-jisへの変換に...
-
Excelマクロにて30分単位の計算...
-
CSVをVB(input)で読み込んだ場...
-
セルに入力されている文字列をU...
-
半角全角混在(JIS)をJEF+EBCDI...
-
H8
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
ExcelVBA実行後に時々落ちる
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
ふりがなをアルファベット化す...
-
英数字を含む文字列(0-9,A-Z)...
-
VS 2008(VB.NET)
-
Symfowareでのデータ型変換につ...
-
S-JIS → JIS コード変換するには
-
CString ←→ BSTRの変換について
-
数字5桁文字コード?
-
10進数→2進数への変換
-
2バイト文字をJEFからSJISに変...
-
JIS → S-JIS コード変換するには
-
EBCDICへの変換
-
RubyでUTF8のコード値を文字に...
-
latin-1 (ISO-8859-1)への変換
おすすめ情報