gpt4 book ai didi

c++ - 使用 seekg 读取二进制数据失败

转载 作者:行者123 更新时间:2023-11-28 01:12:53 25 4
gpt4 key购买 nike

我正在尝试从特定偏移量读取二进制数据。

我是这样写数据的:

long RecordIO::writeRecord(Data *record)
{
this->openWrite();

fstream::pos_type offset = file->tellp();
file->write(reinterpret_cast<char*>(record), sizeof(Data));
return (long)offset;
}

返回的偏移量被存储,并在以后检索。数据是包含数据的结构。

稍后我尝试使用以下代码再次读取相同的数据:

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) 返回 768。我返回的一些偏移量是 768 和 1536。但是当我检查数据的内容时,我得到了完全乱码。我做错了什么吗?编辑:

这是结构:

struct Data{
long key;
char postcode[8];
char info1[251];
char info2[251];
char info3[251];
};

我是这样填的:

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);
}

顺便说一句,数据存储正确,因为我可以按顺序一个接一个地检索它们

最佳答案

你这样做:

file->write(reinterpret_cast<char*>(record), sizeof(Data));

您是否曾经关闭或刷新文件?除非您强制执行,否则数据将缓冲在内存中,稍后写入磁盘。

关于c++ - 使用 seekg 读取二进制数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1309187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com