gpt4 book ai didi

c++ - 使用 fstream 读取

转载 作者:行者123 更新时间:2023-11-28 00:53:08 26 4
gpt4 key购买 nike

我正在使用 fstream 读取二进制文件,但奇怪的是,每次执行代码时,同一个输入文件都会得到不同的值。

if(fs->is_open())
{
while (!fs->eof())
{
fs->seekg( pos );
fs->read( (char *)&mdfHeader, sizeof(mdfHeader_t) );
pos += mdfHeader.length;
fs->read( (char *)&eventHeader, sizeof(eventHeader_t) );
fs->read( (char *)&rawHeader, sizeof(rawHeader_t) );

fs->read( (char *)&ingressHeader, sizeof(ingressHeader_t) );

fs->read( (char *)&l1Header_xc0, sizeof(l1Header_xc0_t) );

fs->read(data, dataLength);
printf("Data=%#x\n",data);

std::cout << "counter: " << c << "\n";
c++;
}

fs->close();

}

如您所见,我打印出数据,每次都应该相同,但产生不同的值。 mdfHeader.length是一个数据 block 的长度。

最佳答案

首先要改变的是:

  1. 条件 eof() 仅在确定读取数据失败的原因时真正有用,但它不是循环的有用条件。
  2. 您需要检查阅读后您是否成功阅读了您感兴趣的数据。

那个,循环看起来像这样:

while (*fs) {
// read data from fs
if (*fs) {
// do something with the data
}
else if (!fs->eof()) {
std::cout << "ERROR: failed to read record\n";
}
}

我还猜测您不需要查找,摆脱它们是个好主意:查找相对昂贵,因为它会丢失任何缓冲区。您没有显示整个代码,但 pos 的初始值很有可能提供某种程度的随机性。此外,您假设您正在读取的字节序列与数据在计算机中的布局方式相匹配。通常情况并非如此,您通常需要调整二进制格式,例如,以适应不同大小的单词、不同的字节顺序、填充等。

关于c++ - 使用 fstream 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976463/

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