string s = path.toStdString(); std::filebuf fb; fb.open(s,std::ios::in|ios::binary); std::istream infile(&fb); if(infile)//读完直接换个方法写出来 { int sheqi_1; char sheqi_2; BufferUtils::readInt(infile,sheqi_1);;//第一个int不知道被什么占了 for (int var = 0; var < 100; ++var) { Picture thepicture; BufferUtils::readInt(infile,thepicture.theurid); //4位,ur,我这全是0c1c BufferUtils::readByte(infile,thepicture.theinlinkDir); //1位,驶入,,很小 BufferUtils::readInt64(infile,thepicture.theinlinkid); //8位,21****** BufferUtils::readByte(infile,thepicture.theoutlinkDir); //1位,驶出,,很小 BufferUtils::readInt64(infile,thepicture.theoutlinkid); //8位,21**** BufferUtils::readInt64(infile,thepicture.theimageid); //8位,21**** BufferUtils::readByte(infile,thepicture.thecrosstype); //1位,类型,不大 //BufferUtils内置大概四位int BufferUtils::readString(infile,thepicture.theversion); //4位,string(好像不一定)之前是"Temp9143" BufferUtils::readByte(infile,sheqi_2); //1位,00 picture_list.push_back(thepicture); //1000行附近,从theimageid第三位开始丢失11位,大概是 6a 75 0c 1c 00 24 | 00 | 31 34 39 31 //2000行附近,在thecrosstype前,多出11位 1c 00 c3 21 33 | 6a 77 0c 1c 00 10 } //cout实现 }运行失败,分析原因
时间: 2023-12-29 17:03:34 浏览: 78
根据你提供的代码和错误描述,我猜测出现了以下问题:
1. `infile` 没有被正确打开,导致读取失败。你可以在打开文件之前加上判断文件是否存在的代码来避免这个问题:
```
if (std::ifstream(s))
{
fb.open(s,std::ios::in|ios::binary);
std::istream infile(&fb);
// ...
}
else
{
std::cerr << "File not found!" << std::endl;
}
```
2. 当读取 `sheqi_1` 时,你使用了 `BufferUtils::readInt`,但是你并没有给出该函数的定义,可能是该函数出了问题导致读取失败。你需要确定该函数的定义是否正确,并且确保该函数可以正确读取数据。
3. 在读取 `thepicture.theversion` 时,你使用了 `BufferUtils::readString`,但是你没有给出该函数的定义。如果该函数存在问题,可能会导致读取失败。你需要确定该函数的定义是否正确,并且确认该函数可以正确读取字符串数据。
4. 在读取 `sheqi_2` 时,你使用了 `BufferUtils::readByte`,但是你并没有处理读取结果。可能会导致读取失败。你需要将读取结果存储到 `thepicture` 对象中,或者直接忽略该值。
5. 在读取 `thepicture.theimageid` 和 `thepicture.thecrosstype` 时,你描述了数据丢失和多出的情况。这可能是由于读取时的字节序问题导致的。你需要确定输入数据的字节序,并且确保读取时按照正确的字节序读取数据。
希望这些提示能帮助你解决问题。如果问题还未解决,可以提供更多信息或代码细节,以便更好地理解问题。
阅读全文