Ich versuche, Binärdaten von einem bestimmten Offset zu lesen.Das Lesen binärer Daten mit seekg schlägt fehl
Ich schreibe die Daten auf folgende Weise:
long RecordIO::writeRecord(Data *record)
{
this->openWrite();
fstream::pos_type offset = file->tellp();
file->write(reinterpret_cast<char*>(record), sizeof(Data));
return (long)offset;
}
Der Offset zurück gespeichert und später abgerufen werden. Daten sind eine Struktur mit den Daten.
Später versuche ich mit dem folgenden Code wieder, dass die gleichen Daten zu lesen:
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 (Data) liefert 768. Einige von den Offsets bekomme ich zurück ist 768 und 1536. Aber wenn ich den Inhalt überprüfen Von den Daten bekomme ich komplettes Kauderwelsch. Tue ich etwas falsch? Edit:
Dies ist die Struktur:
struct Data{
long key;
char postcode[8];
char info1[251];
char info2[251];
char info3[251];
};
Und das ist, wie ich es füllen:
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);
}
Btw, werden die Daten korrekt gespeichert, weil ich sie ein retreive kann by one, sequential
Das war das Problem. Es gibt jetzt die richtigen Daten zurück. – Ikke