2010-08-23 1 views

ответ

7

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

#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 
+0

, если у вас есть структура in_addr, вы также можете использовать предложение Йенса Густедта ниже. – KedarX

3

правильная функция, чтобы использовать для этой цели

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)); 
+0

+1 для использования стандартных функций. Но вы можете использовать 'INET_ADDRSTRLEN' вместо '16' для вашего массива символов и использовать простой' in_addr_t addr = YOURVALUE' вместо целой структуры. – schot

+0

@schot: Я не уверен в 'in_addr_t addr = YOURVALUE'. 'in_addr_t' по сути является всего лишь целым типом, нет? При вызове с 'AF_INET' в качестве аргумента' inet_ntop' ожидает 'struct in_addr', который, по крайней мере теоретически, может иметь другие поля, кроме' s_addr', и где он не должен быть даже первым членом. –

+0

Я немного не уверен. Но второй аргумент 'inet_ntop()' - 'const void * ограничивает src'. POSIX говорит: «Аргумент src указывает на буфер, содержащий адрес IPv4, если аргумент af является AF_INET, [...]», но не указывает разрешенные форматы для этого буфера. – schot

Смежные вопросы