比较unsigned char *和const char *的最快方法

时间:2014-04-11 06:04:16

标签: c++ string

比较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;
            }

    }

这是正确的方式还是你建议别的什么?

非常感谢。

2 个答案:

答案 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)

您可以尝试memcmp。虽然我不知道它在比较不同歌词的指针时是否能正常工作。

您还可以尝试将msg的类型更改为char *,如果它不与您的其他程序发生冲突并使用strcmpstrncmp