Как выполнить синтаксический анализ структурной переменной - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь получить IP-адрес от пользователя и определить, относится ли он к классу A, B или C. Я не могу разбить переменную структуры addr, чтобы проверить биты. Может кто-нибудь подсказать? :). Большое спасибо.

int main(int argc, char **argv)
{

    struct in_addr addr;
    uint32_t temp;
    char *IP;
    int ret = 0;    

    if (argc != 2)
        error(1, errno, "Too many or few arguments\n");
    IP = argv[1];
        ret = inet_aton(IP, &addr);
    if (ret == 0)
        error(1, errno, "Invalid IP- address provided\n");
    printf("The address in the structure is network byte order:(Big- Endian) %X\n", addr);

}

1 Ответ

1 голос
/ 28 мая 2020

A struct in_addr выглядит так:

   struct in_addr {
       uint32_t       s_addr;     /* address in network byte order */
   };

Вы можете использовать поле s_addr для доступа к необработанным байтам адреса. Передайте это ntohl и присвойте результат uint32_t, затем вы можете применить к нему битовые маски, чтобы определить класс адреса.

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