特定のオフセットからバイナリデータを読み込もうとしています。seekgでバイナリデータを読み込めません。
私は次のようにデータを書き込む:
long RecordIO::writeRecord(Data *record)
{
this->openWrite();
fstream::pos_type offset = file->tellp();
file->write(reinterpret_cast<char*>(record), sizeof(Data));
return (long)offset;
}
オフセット返さが保存され、後に取得されます。データはそのデータを持つ構造体です。
後、私は次のコードで再びその同じデータを読み取ろう:私は内容を確認したときに768と1536私が取り戻すオフセットオフ768一部を返し
Data* RecordIO::getRecord(long offset)
{
openRead();
file->seekg((fstream::pos_type) offset);
Data data;
file->read(reinterpret_cast<char *>(&data), sizeof(Data));
return new Data(data);
}
はsizeof(データ)しかし、データのうち、私は完全な不器用さを取得します。間違っていますか?私はそれらを1つずつ盗んことができるので、
for(int i = 1; i <= numOfRecords; ++i){
newData.key = i;
newData.postcode[0] = '1' + (rand() % 8);
newData.postcode[1] = '0' + (rand() % 9);
newData.postcode[2] = '0' + (rand() % 9);
newData.postcode[3] = '0' + (rand() % 9);
newData.postcode[4] = ' ';
newData.postcode[5] = 'A' + (rand() % 25);
newData.postcode[6] = 'Z' - (rand() % 25);
newData.postcode[7] = '\0';
for(int j = 0; j < 250; ++j){
newData.info1[j] = '+';
newData.info2[j] = '*';
newData.info3[j] = '-';
}
newData.info1[250] = '\0';
newData.info2[250] = '\0';
newData.info3[250] = '\0';
int offset = file->writeRecord(&newData);
index->setOffset(i, offset);
}
ところで、データが正しく保存されている:私はそれを埋める方法を
struct Data{
long key;
char postcode[8];
char info1[251];
char info2[251];
char info3[251];
};
そして、これは次のとおりです。 編集:
これは構造体であります1つずつ、順番に
それが問題でした。今すぐ正しいデータを返します。 – Ikke