最近C++でIOに入ってきました。私は、バイナリファイルストリームから文字列を読み込もうとしています。バイナリからC++でカスタム文字列を再帰的に読み取る方法
カスタムタイプは次のように保存されます。
文字列は、文字列の長さが付いています。だからこんにちは、このように格納されます:6Hello \ 0。
私は基本的にバイナリファイルのテーブル(この場合は名前テーブル)からテキストを読み込みます。ファイルのヘッダーは、このテーブル(この場合は112バイト)と名前の数(318)のオフセットを教えてくれます。
この情報を使用して、このオフセットで最初のバイトを読み取ることができます。文字列の長さがわかります(例:6)。だから私は次のバイトから始まり、さらに5つを読んで、完全な文字列 "Hello"を取得します。これはオフセットのファーストネームでうまくいくようです。再帰的に残りの部分を読み込もうとすると、本当にたくさんのゴミが出ます。私はループと再帰関数を使用しようとしましたが、うまくいきません。問題が何であるかわからないので、元の1つの名前の取得方法に戻ります。コードは次のとおりです。
int printName(fstream& fileObj, __int8 buff, DWORD offset, int& iteration){
fileObj.seekg(offset);
fileObj.read((char*)&buff, sizeof(char));
int nameSize = (int)buff;
char* szName = new char[nameSize];
for(int i=1; i <= nameSize; i++){
fileObj.seekg(offset+i);
fileObj.read((char*)&szName[i-1], sizeof(char));
}
cout << szName << endl;
return 0;
}
ドジ出力を作成せずに318の名前をすべて反復する方法はありますか? これを見ていただきありがとうございます、あなたの助けに感謝します。
:
未使用と無意味なパラメータを削除し、私はこのような何か、この関数を書くのでしょうか?単純なループは正常に動作します。 –
@πάνταῥεῖ私は別のループの中でそれを入れ子にしてみましたが、出力はそうではありません。最初の文字列の後のすべての文字列は毎回ガベージとランダムです。 – UnWorld
よく分かりませんが、デバッガであなたのコードを調べて、見つからなかったものを見つけてください。 –