Простой способ сделать то, что вы хотите, и избежать проблемы, о которой вы говорите, это просто замаскировать шестнадцатеричные цифры, которые вам не нужны (размер вашего шаблона), а затем сравнить это с вашим шаблоном. , то есть:
#include <iostream>
int main(void)
{
unsigned num1 = 0x00000B21;
unsigned num2 = 0xABC0A20;
unsigned pattern = 0xA20;
std::cout << ((num1 & 0xFFF) == pattern) << std::endl;
std::cout << ((num2 & 0xFFF) == pattern) << std::endl;
return 0;
}
Выход:
0
1
Это будет также работать, когда вы хотите, чтобы в шаблон было включено 0.