Взять двоичное представление и обнулить то, что не соответствует вашей сетевой маске.
Пояснение:
Допустим, у вас есть IP a.b.c.d
и вы хотите сопоставить его с e.f.g.h/i
, тогда вы можете бросить IP в одно целое число без знака uint32_t ip = a<<24 + b<<16 + c<<8 + d
и сделать то же самое с uint32_t range = e<<24 + f<<16 + g<<8 + h
. Теперь вы можете использовать сетевую маску: uint32_t mask = (~0u) << (32-i)
. Теперь вы можете просто проверить, находится ли ip
"в" range
, сравнив их: ip & mask == range & mask
.