Как рассчитать операцию AND IP-адреса и маски подсети в C? - PullRequest
1 голос
/ 22 февраля 2010

У меня есть IP-адрес и маска подсети, оба без знака long;как я могу И оба из них и проверить, принадлежит ли мой входящий IP-адрес (IP2) к той же подсети?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

Используйте круглые скобки - уровни приоритета сбивают с толку:

if ((ip1 & subnet) == (ip2 & subnet))
    ...

Исходный код был фактически таким же, как:

if (ip1 & (subnet == ip2) & subnet)
    ...
1 голос
/ 22 февраля 2010

Так же, как вы это сделали:

if ((ip1 & subnet) == (ip2 & subnet))
  printf("same subnet 0%x", subnet);

(только что добавили (), чтобы убедиться, что вычисления выполнены в правильном порядке).

...