2011-11-11 10 views
1

私は作成したバイナリファイルを1つ持っています。その中で、データはバイナリ形式で保存されますが、私は人間が読める形式で表示します。私はstring.Toノートとして宣言されているtemp_S、でそのデータ「opalgo」を開催したい効率的な方法でデータを取り込むためのアルゴリズム

[someOtherData]opalgo$apollo$[someOtherData] 
      ^
      ^
      ^
      file pointer 

は、例で示されていない、私はこの場所とその長さは何であるかデータかわかりません。

データをバイナリファイルに保存する。

  • まず、ファイルポインタをインクリメントすることによってその長さを計算しました。私は '$'と比較しました。
  • 第2に、このケースではデータの長さに戻ってくる| opalgo | = 6.
  • 3回目、私は1つのcharをとり、 ""で初期化された文字列と連結します。つまり、string + = temp_Charです。

上記のアルゴリズムは、私の意見ではもちろん混乱です。私はバイナリファイルからデータを取る効率的な方法を見つけることができませんでした。今、私は少し恥ずかしいです。あなたは私により良い方法を与えることができますか?

EDIT:ファイルサイズはわかりませんが、ご存じのようにseekgとtellgを使用して計算できます。

+0

このファイルのサイズはどのくらいですか?または、数KBから数GBになる可能性がありますか? –

答えて

1

3つのステップで実行する代わりに、すべてを最初に実行することができます。 '$'を終了することを探している間に、文字をtemp_Sに入れてください。長さを計算する必要はありません。

std::ifstream input(...); 

std::string temp_S; 
char c; 
while (input.get(c)) 
{ 
    if (c == '$') 
     break; // Found terminator, read no more into string 
    temp_S += c; 
} 
+0

私はすべてのデータを取ることを確認したので、長さを計算しました。さらに、場合によっては、ios :: read()関数をlengthで直接使用します。 –

関連する問題