如何用C++递归地从二进制文件中读取自定义字符串
How to read custom string with C++ from binary recursively
我最近开始使用C++进行IO。我正在尝试从二进制文件流中读取一个字符串。
自定义类型保存如下:
字符串的前缀是字符串的长度。所以hello,会像这样存储:6Hello\0。
我基本上是从二进制文件中的表(在本例中是名称表)中读取文本。文件头告诉我这个表的偏移量(在这种情况下是112字节)和名称的数目(318)。
使用这些信息,我可以读取这个偏移量的第一个字节。这告诉我字符串的长度(例如6)。所以我将从下一个字节开始,再读5个字节,得到完整的字符串"Hello"。这似乎与偏移处的第一个名称配合得很好。尝试递归地读取其余部分确实提供了大量垃圾。我试过使用循环和递归函数,但效果不太好。不确定问题是什么,所以恢复到原来的一个名称检索方法。这是代码:
int printName(fstream& fileObj, __int8 buff, DWORD offset, int& iteration){
fileObj.seekg(offset);
fileObj.read((char*)&buff, sizeof(char));
int nameSize = (int)buff;
char* szName = new char[nameSize];
for(int i=1; i <= nameSize; i++){
fileObj.seekg(offset+i);
fileObj.read((char*)&szName[i-1], sizeof(char));
}
cout << szName << endl;
return 0;
}
知道如何迭代所有318个名称而不产生不可靠的输出吗?感谢您花时间仔细阅读,非常感谢您的帮助。
您有点过于复杂了-不需要查找下一个顺序读取。
删除未使用和毫无意义的参数,我会写这样的函数:
void printName(fstream& fileObj, DWORD offset) {
char size = 0;
if (fileObj.seekg(offset) && fileObj.read(&size, sizeof(char)))
{
char* name = new char[size];
if (fileObj.read(name, size))
{
cout << name << endl;
}
delete [] name;
}
}
相关文章:
- 威纳派读取自定义文件或文件夹的所有访问权限
- 通过自定义分隔符从文件中读取对象数组
- 从 MAT 文件中读取 C 应用程序中的自定义类
- QT C 读取自定义文件结构
- Q读取自定义事件
- 如何在C++中读取自定义格式的文本文件
- 如何用C++递归地从二进制文件中读取自定义字符串
- 调用函数时,c++无法使用自定义类读取内存
- 使用自定义QHeaderView读取模型数据
- 从字符串流读取和写入自定义对象时测试失败
- 如何使用BinaryReader类使用C#读取自定义文件(C++)
- 从istream读取自定义类型失败时的预期行为
- 如何读取自定义TIFF标记(不带TIFFFieldInfo)
- 自定义读取产生垃圾
- 如何从套接字读取接收自定义数据类型
- 从自定义集合(struct Array)中读取数据
- 从QSettings中读取自定义元类型数组
- FFMPEG自定义读取功能读取所有数据
- 自定义存档格式文件读取
- 如何自定义cin来读取我们自己的格式