将数组与传入的字节*缓冲区进行比较的最快方法

fastest way to compare array with incoming byte* buffer

本文关键字:比较 方法 缓冲区 数组 字节      更新时间:2023-10-16

有没有最快的方法可以将 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) && ...)
{
  //...
}

如果数组对齐,这可能会更快:

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];
}

我同意你的观察,即代码感觉不正确。你需要的是一个循环。 一个 for 循环或 do while 循环。 在这两种情况下,一旦发现不同的字节,您就可以尽早爆发。Kltis 提到的检查数组长度的早期修剪是早期保存运行时的最简单方法。

如果你真的需要更深入,看看 memcmp(( 函数。

祝你好运!