- ベストアンサー
読み込んだファイル
読み込んだファイルがテキストファイルかバイナリファイルかを プログラム上でわかる方法はありますでしょうか?
- みんなの回答 (12)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (11)
- D-Matsu
- ベストアンサー率45% (1080/2394)
- JaritenCat
- ベストアンサー率37% (122/322)
- arain
- ベストアンサー率27% (292/1049)
- php504
- ベストアンサー率42% (926/2160)
- arain
- ベストアンサー率27% (292/1049)
- D-Matsu
- ベストアンサー率45% (1080/2394)
- arain
- ベストアンサー率27% (292/1049)
- D-Matsu
- ベストアンサー率45% (1080/2394)
- D-Matsu
- ベストアンサー率45% (1080/2394)
- chie65536
- ベストアンサー率41% (2512/6032)
- 1
- 2
関連するQ&A
- バイナリファイルの書き出し
バイナリファイルにデータを書き込むプログラムを作りたいと思っています。実は、Standard MIDI Fileのバイナリファイルを作りたいんです。 SMFについては、今まで、直接バイナリエディタで開き、16進数の数字をいじくって、データ書き換えたりしてたので直接バイナリファイルに16進数での数字を書きたいんです。 たとえば、テキストファイルに903C408360803C0000みたいに吐き出すプログラムでは、バイナリファイルに書き出してからバイナリエディタで開くと こいつがさらに16進数に変換されてしまいますよね? そうならないようにするにはどうやればいいんですか?
- ベストアンサー
- その他(プログラミング・開発)
- テキストファイルのデータからバイナリを作りたい
現在、テキストデータとしてCSVファイル1つあたり8バイトのデータが1000個ほどのデータが書かれているファイルがあります。このデータをバイナリファイルへ数値も変換して行きたいと思っています。 たとえば1個目のデータ”12345678”というテキストデータをバイナリの"12345678"に変換したらそれを0x00番地に並べて、そして2個目のデータ”87654321”というデータをバイナリにしたらそれを0x90離れた場所に置いていき、それを1000回繰り返して、結果をバイナリファイルで出力したいのですが、何か簡単にできるフリーソフトなどありませんでしょうか? また、プログラムとかでも簡単にできるのならそうしたいのですが、どうしたらよいか教えていただけないでしょうか?
- ベストアンサー
- C・C++・C#
- バイナリファイルをテキストファイルに変換する方法を教えて頂けませんか。
こんにちは。 バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。 以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。 ####プログラム#### #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 酷い文字化けを起こしてしまっています。 解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。
- 締切済み
- C・C++・C#
- この方法でバイナリデータが読めるのでしょうか
あるプログラムでバイナリ出力しているファイルがあります。これを単純にfread()で読み込んで、今度はfprintf()で出力すればどうなりますか?やりたいことは、バイナリ出力されたファイルをテキストファイルに変換したいのですが、この方法で、バイナリファイルが読めるでしょうか? ちなみに、読みたいバイナリファイルは、fwrite()で書き出したファイルです。 あと、「バイナリファイルです」と言って貰ったファイルを、windowsのテキストエディタなどで開くと、appleなどの通常のアルファベットの単語と、あとは訳のわからないものが見えるのですが、これってバイナリファイルじゃないですよね?appleなどと書いてあるのですから。 間違えていましたら、訂正お願いします。
- ベストアンサー
- C・C++・C#
- 入力ファイルをバイナリにする利点
CSV形式の入力ファイルをテキストではなく、バイナリのCSVに変換して利用する利点てなんでしょうか? つまり、とあるプログラムで「.csvファイル」を、エディタで開くと文字化けする「拡張子なし(または.dat)ファイル」に変換してからそれを入力ファイルとしているのですが、素人の自分から考えると、テキスト形式で作ったCSVファイルをそのまま入力ファイルにすればいいんじゃないかと思ってしまいます。 バイナリの方が読み込み、書き込みが速くなるのでしょうか? またはバイナリでないとできないことがあるのでしょうか? ポインタなどが関係しているのでしょか? ちなみにその開発環境はVC++です。
- ベストアンサー
- C・C++・C#
- PHPでテキストファイルかどうかを判定する方法
基本的なことですが、PHPでテキストファイルかバイナリーファイかを判定する方法がわかりません。以下のperlコードをphpで書く方法を教えてください。 if( -T $filename ){ テキストファイルの処理 }else{ バイナリーファイルの処理 } マニュアル見ましたがよくわかりませんでした。よろしくお願いします。
- 締切済み
- PHP
- Batファイルをバイナリ形式にする方法
いつもお世話になります。 Batファイルを作ったのですが、ファイルの内容を 見せたくありません。 バイナリにしてしまえば、テキスト等では 見れなくなるので、変換方法等あればご教授 ください。 また、バイナリに変換する以外にもファイルの内容が わからなくなればいいので他によい方法があれば おしえてください。 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
- バイナリファイルの編集
stirling,bzなどのエディタを用いて、バイナリファイルを編集しようとしています。 テキスト(a.txt)のデータをバイナリファイルにコピペしようとしたのですが・・・ テキストで「ff ff ff ff」と書いてあったデータが、バイナリファイルにコピペすると「4646~」というように変換されてしまいました。 バイナリファイルでも「ff ff ff ff」とコピーしたい場合はどのようにすれば良いのでしょうか?
- 締切済み
- フリーウェア・フリーソフト
- ファイル(データ)のコピー
C言語初心者です。 昨年末、C言語の講習時に友人に「例えば100Kくらいのテキストファイルを とあるメモリにコピーする場合、ファイル単位でコピーするのと バイナリ単位でコピーするのはどっちが早いでしょう~?」みたいな ことを言われました。 考えてもよく分からなかったので、実際にコーディングをして実行時間を 計ってみようと思ったのですが、ファイル単位とバイナリ単位でデータを コピーするには具体的にどのようにしたらよいのでしょうか? fopenでテキストファイルをオープンして内容を読み込み、 読み込んだデータをfopenで新規ファイルへ書き込む。 この方法だと、バイナリ単位ということになるのでしょうか?
- ベストアンサー
- C・C++・C#
お礼
動きを見つつ、どこをどう変えたら、動きがどう変わるのかで 勉強するしかないかなと思ってます。 現在こんな感じですが、 テキスト→16進(BZで一致確認)→テキスト 画像→16進(BZで一致確認) の確認は取れたのですが、 16進→画像はどこかおかしいようです。画像表示がされていないので・・ 自分なりにも考えてみます。。
補足
#include<stdio.h> #include<string.h> #define MAX 10000 // 暫定的に最大値を決めてます int Convert(const char* pInFileName, const char* pOutFileName); int ReConvert(const char* pInFileName, const char* pOutFileName); int main(){ int a,ret=-1; char InFileName[MAX]; // 入力ファイル名 char OutFileName[MAX]; // 出力ファイル名 FILE *pInFileName; // 入力ファイルポインタ FILE *pOutFileName; // 出力ファイルポインタ printf("1:コンバート 2:リコンバート\n"); scanf("%d",&a); /***** 入力ファイル名入力 *****/ printf("\n@@@@@入力ファイル名入力\n"); scanf("%s",&InFileName); // 入力ファイルオープン if((pInFileName=fopen(InFileName,"rb"))==NULL){ fclose(pInFileName); printf("ファイルがありません\n"); return -1; } /***** 出力ファイル名入力 *****/ printf("\n@@@@@暗号化後ファイル名入力\n"); scanf("%s",&OutFileName); // 出力ファイルオープン if((pOutFileName=fopen(OutFileName,"rb"))!=NULL){ // read出来るのなら既にファイルあるという事なのでエラーにする fclose(pOutFileName); fclose(pInFileName); printf("同名のファイルが既にあります\n"); return -1; } pOutFileName=fopen(OutFileName,"wb"); // 1:コンバート // 2:リコンバート // 1,2以外:終了 if(a==1){ ret=Convert((const char*)pInFileName,(const char*)pOutFileName); } else if(a==2){ ret=ReConvert((const char*)pInFileName,(const char*)pOutFileName); } if(ret==0){ printf("正常終了\n"); } else{ printf("異常終了\n"); fclose(pOutFileName); fclose(pInFileName); return -1; } fclose(pOutFileName); fclose(pInFileName); printf("数字+エンターで終了します\n"); scanf("%d",&a); return 0; } /*****コンバート*****/ int Convert(const char* pInFileName, const char* pOutFileName) { char moji[MAX]; int len; int i; len = fread( moji, 1, 10000, (FILE*)pInFileName ); for(i=0;i<len;i++) fprintf((FILE*)pOutFileName,"%02x",(unsigned char)moji[i]); fprintf((FILE*)pOutFileName,"\n"); return 0; } /*****リコンバート*****/ int ReConvert(const char* pInFileName, const char* pOutFileName) { char moji16[MAX*2]; // 16進表記 char moji10[MAX]; // 文字配列 int i,j; int len=MAX*2; char *fg; // fgets用戻り値 memset(moji16,'\0',len); memset(moji10,'\0',MAX); // len = fread( moji16, 1, 10000, (FILE*)pInFileName ); fg=fgets(moji16,MAX*2,(FILE*)pInFileName); if(fg==NULL) return -1; len=strlen(moji16); for(i=0,j=0;i<len;i+=2,j++){ sscanf(&moji16[i], "%2x", &moji10[j]); putchar(*moji10); } for(j=0;j<len/2;j++) fprintf((FILE*)pOutFileName,"%c",moji10[j]); return 0; }