![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Вопрос таков:
исходник: http://winpcap.polito.it/docs/docs31beta3/...pcap__tut6.html вопрос: в void packet_handler прошу объяснить код от /* retireve the position of the ip header */ до /* convert from network byte order to host byte order */ включительно. |
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Этот?
ip_len = (ih->ver_ihl & 0xf) * 4; - берётся длина заголовка IPv4, очевидно в словах - Internet header length (4 bits) умножается на длину слова (4). uh = (udp_header *) ((u_char*)ih + ip_len) - получаем адрес udp_header всё |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
& - побитовое умножение
Это обнуление старших 4 бит (так как ih->ver_ihl - BYTE) К примеру BYTE сh = 170 - это в двоичной - 10101010 если ch &= 0xf, то ch = 10, тоесть 00001010 Это сообщение отредактировал(а) zss - 22.6.2004, 13:48 |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
Да, этот...
Что в данном коде делает оператор & ? |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
я же вроде ответил |
|||
|
||||
| Johen |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 25.5.2004 Где: Санкт-Петербург Репутация: нет Всего: нет |
угу... понял... только зачем использовать этот оператор в вышеописанном годе?
|
|||
|
||||
| Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
Там выше посмотри структуру ih.
Старшие 4 бита ih->ver_ihl - версия, младшие - длина заголовка. И как абсолютно правильно пишет zss выделяем младшие 4 бита |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
Тоесть это не что иное как маска
если для байта ch &= 0xf, то младшие 4 бита если ch = ch >> 4 ch &= 0xf, то старшие 4 бита Это сообщение отредактировал(а) zss - 22.6.2004, 14:01 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |