2017-03-16 30 views
1

有什么最快的方法来比较24个元素字节数组与传入的byte*缓冲区?最快的方法来比较阵列与传入字节*缓冲区

byte compare_array[24]= 
{0x00,0x00,0x00,0x01,0x26,0x05, 
0xF8,0x00,0x11,0x22,0x33,0x44, 
0x55,0x66,0x77,0x88,0x99,0xAA, 
0xBB,0xCC,0xDD,0xEE,0xFF,0xFF}; 

下面的代码感觉不舒服。

if((buffer[0] == 0x00) && (buffer[1] == 0x00) && ...) 
{ 
    //... 
} 
+0

首先,你可以做一个大小检查,如果大小不同,你不必进入检查 – KItis

回答

0

我同意你的观察,认为代码不正确。 你需要的是一个循环。 for循环或do while循环。在这两种情况下,只要找到不同的字节,就可以尽早解决问题。 Kltis提到的检查数组长度的早期修剪是尽早保存运行时的最简单方法。

如果您确实需要深入了解一下memcmp()函数。

祝你好运!

+0

谢谢单个元素,我申请这个代码为我的项目:memcmp(compare_array,buffer,24); – sailfish009

1

这可能会更快,如果阵列排列:

bool compare(uint8_t* buffer) { 
    uint64_t *c64 = (uint64_t*)compare_array; 
    uint64_t *b64 = (uint64_t*)buffer; 
    return c64[0] == b64[0] && c64[1] == b64[1] && c64[2] == b64[2]; 
}