Apakah ada cara tercepat untuk membandingkan array byte 24 elemen dengan buffer byte* yang masuk?

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

Kode di bawah ini tidak terasa baik-baik saja.

if( (buffer[0] == 0x00) && (buffer[1] == 0x00) && ...)
{
  //...
}
1
sailfish009 16 Maret 2017, 05:59

2 jawaban

Jawaban Terbaik

Saya setuju dengan pengamatan Anda bahwa kodenya terasa tidak benar. Yang Anda butuhkan adalah lingkaran. Perulangan for atau perulangan do while. Dalam kedua kasus, Anda dapat keluar lebih awal segera setelah Anda menemukan byte yang berbeda. Pemangkasan awal untuk memeriksa panjang larik seperti yang disebutkan Kltis adalah cara termudah untuk menghemat waktu proses sejak dini.

Jika Anda benar-benar perlu masuk lebih dalam, lihat fungsi memcmp() .

Semoga berhasil!

0
Monza 16 Maret 2017, 06:00

Ini mungkin lebih cepat, jika array disejajarkan:

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
perreal 16 Maret 2017, 06:11