我需要在(非文本)文件中搜索字节序列“9µ}Æ”(或“\x39\xb5\x7d\xc6”)。
在网上搜索了 5 个小时后,这是我能做的最好的。它有效,但我想知道是否有更好的方法:
char buffer;
int pos=in.tellg();
// search file for string
while(!in.eof()){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='9'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='µ'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='}'){
in.read(&buffer, 1);
pos=in.tellg();
if(buffer=='Æ'){
cout << "found";
}
}
}
}
in.seekg((streampos) pos);
笔记:
- 我不能用
getline()
。它不是文本文件,因此可能没有很多换行符。 - 在我尝试使用多字符缓冲区,然后将缓冲区复制到 C++ 字符串,然后使用
string::find()
. 这不起作用,因为'\0'
整个文件中有很多字符,因此缓冲区中的序列在复制到字符串时会被剪得很短。