有没有最快的方法将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 :(得分: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];
}
答案 1 :(得分:0)
我同意你的观察,即代码感觉不对。 你需要的是一个循环。 for循环或do while循环。在这两种情况下,只要找到不同的字节,就可以提前爆发。 像Kltis所提到的那样,检查数组长度的早期修剪是最早保存运行时的最简单方法。
如果您真的需要深入了解,请查看memcmp()函数。
祝你好运!