шестнадцатеричное значение ip в стандартный формат - PullRequest
1 голос
/ 23 августа 2010

есть ли в linux функция для отображения значения 7d162f7d в формате 125.22.47.125, т. Е. Преобразование шестнадцатеричного IP-адреса в его стандартный IP-формат

Ответы [ 2 ]

7 голосов
/ 23 августа 2010

Вы можете использовать что-то вроде:

#include <stdio.h>
static char *ipToStr (unsigned int ip, char *buffer) {
    sprintf (buffer, "%d.%d.%d.%d", ip >> 24, (ip >> 16) & 0xff,
        (ip >> 8) & 0xff, ip & 0xff);
    return buffer;
}
int main (void) {
    char buff[16];
    printf ("%s\n", ipToStr (0x7d162f7dU, buff));
    return 0;
}

, что дает:

125.22.47.125
3 голосов
/ 23 августа 2010

Правильная функция для этой цели -

inet_ntop - конвертирование IPv4 и IPv6 адреса из двоичного в текстовую форму

В вашем случае, когда вы, кажется, ссылаетесь на IPv4-адрес, вы должны создать struct in_addr что-то подобное

 struct in_addr addr = { .s_addr = YOURVALUE };

и тогда вы должны называть это так

char addrstr[16] = { 0 };

inet_ntop(AF_INET, &addr, addrstr, sizeof(struct in_addr));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...