比较unsigned char *和const char *的最快方法是什么?
说,我有
unsigned char* msg; //length is more than 10000
typedef struct {
atomic<bool> updated;
const char cmp[10]="test ";
int id=10000;
} test;
我想比较msg(从第30个字符开始)到test.cmp最多5个长度。我正在做以下代码
for (int k = 0; k < 5; k++) {
if (*(msg + 30+ k) != test.cmp[k]) {
break;
}
}
这是正确的方式还是你建议别的什么?
非常感谢。
答案 0 :(得分:4)
使用strncmp
,这样你可以比较前5个字符,并通过传递msg + 30,第一个字符是第30个
if (strncmp(reinterpret_cast<const char*>(msg+30), &(test.cmp), 5)==0){
printf("match");
}
http://www.cplusplus.com/reference/cstring/strncmp/
使用memcmp
是一个错误,因为cmp是一个以NULL结尾的字符串,而memcmp不会终止对NULL字节的比较。
答案 1 :(得分:0)