2009-07-29 7 views
2

編集:テキストファイルをバイトに変換しようとしています。コードがバイトに変換しているのかどうかはわかりません。ここにヘッダへのリンクがあるので、as_bytes関数を見ることができます。バイナリファイルI/Oの問題

link今出ストリームはちょうどベクトルの内容を出力し

#include "std_lib_facilities.h" 

int main() 
{ 
    cout << "Enter input file name.\n"; 
    string file; 
    cin >> file; 
    ifstream in(file.c_str(), ios::binary); 

    int i; 
    vector<int> bin; 

    while(in.read(as_bytes(i), sizeof(int))) 
     bin.push_back(i); 

    ofstream out(file.c_str(), ios::out); 

    for(int i = 0; i < bin.size(); ++i) 
      out << bin[i]; 

    keep_window_open(); 
} 

注意。書き込み機能やバイナリモードは使用しません。これは、ファイルを大きな行の数に変換します - これは私が探しているものですか?ここで

は、第二のコードのファイル変換の例である:

that guy likes to eat lots of pie (not sure if this was exact text) 

は、すべてのファイルが中に保存されているので、あなたの第1の方法は、ファイルを変更していない理由がある

543518319544825700191924850016351970295432362115448292821701667182186922608417526375411952522351186935715718643976841768956006 
+0

こんにちは、正確にはバイナリでどういう意味ですか?あなたは何を期待していますか? –

+0

バイナリファイルを読み書きすることになっています。必ずしもテキストファイルをバイナリファイルに変更する必要はありません。私は質問を編集します。 – trikker

+0

私が達成しようとしていることをより明確にするために大きく編集されています。 – trikker

答えて

2

になります同じ方法。テキストファイルとバイナリファイルの唯一の「違い」は、テキストファイルにはASCII文字で表示できるバイトのみが含まれていますが、バイナリファイル*ははるかにランダムな多様性とバイトオーダを持っています。したがって、バイト単位でバイトを読み込み、バイト単位で出力しています。

*私は文字ポイントと使用されるエンコーディングに応じて、1文字ポイントを表すために複数のバイトを持つことができるので、バイナリとしてUnicodeテキストファイルを使用しています。

第2の方法もかなり簡単です。前と同じようにバイトを読み込み、整数(おそらく4バイトの長さ)に格納しています。次に、整数であるかのように整数を出力しているので、数値の文字列が表示されます。

最初の方法でバイトの一部を切り捨てる理由は、おそらくコードにバグがある可能性があるからです。私は、いくつかのテストコードをデバッグするのではなく、この場合のアイデアを説明することが重要であると考えました。

+0

はい、それは実際の単語ではなくバイトとして読み込むことでした。しかし、本書ではバイナリファイルと呼ばれています。 – trikker

+0

すべてのファイルはバイナリファイルです。オープニングモードでは、内容の読み取りと処理の方法を決定します。テキストモードでファイルを開き、 '\ n'値が見つかった場合は改行として解釈され、バイナリモードで開くと解釈されません。 –

+0

私は何をしようとしているのは、バイト形式でそれらを保持し、それらのように出力することです。そして最終的にバイトを元の言葉に戻します。私は正しい道にいるかどうか分かりません。 – trikker

関連する問題