我已经使用fread将文件读入到一个字符数组中。现在我想要搜索该数组中的两个连续的十六进制值,即FF后跟D9(它是一个jpeg标记,表示文件的结尾)。下面是我用做代码:在文件的字符数组中搜索2个连续的十六进制值
char* searchBuffer(char* b) {
char* p1 = b;
char* p2 = ++b;
int count = 0;
while (*p1 != (unsigned char)0xFF && *p2 != (unsigned char)0xD9) {
p1++;
p2++;
count++;
}
count = count;
return p1;
}
现在我知道这个代码的工作,如果我搜索不包含0xFF的(如4E随后46)的十六进制值,但每次我尝试搜索0xFF它失败。当我没有将十六进制值转换为unsigned char时,程序不会进入while循环,当我执行程序时,会遍历数组中的所有字符,并且不会停止,直到出现界限错误。我很难过,请帮忙。
忽略计数,它只是一个帮助我调试的变量。
在此先感谢。
我其实不相信你的条件是正确的。不应该是'!(* p1 ==(unsigned char)0xFF && * p2 ==(unsigned char)0xD9)'而不是? (暂且不谈,你用'unsigned char'和'unsigned int'的问题)就像目前所写的,似乎只要遇到0xFF *或* 0xD9就会结束循环。 – 2011-05-22 18:18:54
为什么不使用['strstr()'](http://www.cplusplus.com/reference/clibrary/cstring/strstr/)? – Joulukuusi 2011-05-22 18:27:07
将'&&'更改为'||'并阅读Oli的答案。 – 2011-05-22 18:27:22