如何搜索" \ 0"在二进制文件中?

时间:2015-05-28 08:24:20

标签: c++

我有一个.idx文件,我想用C ++读取这个文件。该文件中的所有项目均以\ 0标记分隔。我想得到那个项目清单。我尝试按如下方式实现它:

while (file.read(buffer, sizeof buffer), chars_read = file.gcount()){

            string search_term = "\0";            
            string contentElement = buffer;

            string::size_type  foundoffset = contentElement.find(search_term);

            if (foundoffset != string::npos){
                //Do something...
            }
         //code continue here.
         .....
}

但是在C ++中," \ 0"被视为null,如果您有使用C ++的经验,请指导我如何操作。请注意,此idx文件是二进制文件。 谢谢!

2 个答案:

答案 0 :(得分:3)

不要在二进制文件上使用<root> [TEXT:"\n "] <children> [TEXT:"\n "] <foo1 val="23"/> [TEXT:"\n "] <foo2 val="14"/> [TEXT:"\n "] <foo3 val="5"/> [TEXT:"\n "] </children> [TEXT:"\n"] </root> 。如果使用原始char数组,请在其中进行搜索,例如使用SELECT * FROM patient p1 WHERE weight > 1.2*(select avg(weight) FROM patient p2 WHERE p1.gender = p2.gender AND p1.ward_no = p2.ward_no)

例如:

std::string

答案 1 :(得分:3)

如果buffer是一个字符数组(例如char buffer[...]),那么contentElement字符串的构造只能读到'\0'中的buffer。< / p>

但是,有一个std::string constructor允许您设置字符串的内容长度,如果包含的字符串可以包含嵌入的终结符字符,则应该使用该字符串:

std::string contentElement(buffer, chars_read);

虽然出于您的目的,我建议您远离std::string,然后直接在缓冲区中搜索。例如std::find