今持っているバイナリファイル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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
Symfowareでのデータ型変換につ...
-
VS 2008(VB.NET)
-
COBOLによる全角・半角混...
-
「彅」という文字のエンコード
-
C#で16進数からASCIIへの変換の...
-
CString ←→ BSTRの変換について
-
EBCDICをASCIIに変換したい
-
2バイト文字をJEFからSJISに変...
-
10進数→2進数への変換
-
英数字を含む文字列(0-9,A-Z)...
-
JIS → S-JIS コード変換するには
-
byte配列の内容をstringにコピ...
-
ExcelVBA実行後に時々落ちる
-
DOUBLE型の16進HEX文字列変換に...
-
数値のパック10進数の変換に...
-
相対パスを絶対パスに変換したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
「彡」って文字はなんという文...
-
セル内の文字列が日本語か英語...
-
VS 2008(VB.NET)
-
ExcelVBA実行後に時々落ちる
-
std::stringからLPCWSTR型への変換
-
英数字を含む文字列(0-9,A-Z)...
-
画像データ(png)をcsvファイル...
-
COBOLによる全角・半角混...
-
latin-1 (ISO-8859-1)への変換
-
2バイト文字をJEFからSJISに変...
-
sedで日本語の置換方法について
-
Symfowareでのデータ型変換につ...
-
ふりがなをアルファベット化す...
-
VisualBasic6からVB2005に移行...
-
フォームのコントロールのバッ...
-
「髙(はしごたか)」を文字コー...
-
C++でEUC-JPをSJISに変換したい。
-
Excel vba で1と10を正確に判断...
-
error C2679 がとれません><
おすすめ情報