Битовая операция рассечения - PullRequest
2 голосов
/ 08 декабря 2011

Мне нужно хеш-значение, рассчитанное по IP-адресу и номеру порта. Я нашел следующий пример, и через trail я вижу, что он возвращает трехзначное хеш-значение, которое мне подходит. Однако я хотел бы знать, что происходит, чуть подробнее, и мне трудно разобраться в этом.

Вот фрагмент кода:

((addr.s_addr ^ (addr.s_addr>>8)^ntohs(port) & 255);

addr.s_addr - это длинная строка без знака (32 бита). Порт без знака короткий (16 бит).

Значение IP-адреса 192.168.50.70 и номер порта 60049 возвращают хеш-значение 249 (при выводе с% d).

Может ли кто-нибудь помочь мне понять, что на самом деле делает операция? :)

Спасибо.

С уважением Andreas

1 Ответ

0 голосов
/ 08 декабря 2011

Это не великая загадка: XORs (^) добавляет.s_addr с собой, сдвинув 8 пробелов вправо; затем копирует его с номером порта и, наконец, возвращает все 255, чтобы ограничить его длиной до 8 байт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...