Преобразование 4-байтового IP-адреса в стандартную десятичную нотацию с точками - PullRequest
3 голосов
/ 04 ноября 2010

Если у меня есть 4-байтовый адрес, сохраненный в символьном адресе [4], и содержимое:

address[0] = '\x80';
address[1] = '\xAB';
address[2] = '\x0A';
address[3] = '\x1C';

// all together: 80 AB 0A 1C

Я хочу преобразовать его в массив символов, который выглядит как «128.171.10.28», поскольку 80 в шестнадцатеричном формате - это 128, AB в шестнадцатеричном - 171 и т. Д.

Как я могу это сделать?

Ответы [ 3 ]

9 голосов
/ 04 ноября 2010
char saddr[16];
sprintf(saddr, "%d.%d.%d.%d", (unsigned char)address[0], (unsigned char)address[1], (unsigned char)address[2], (unsigned char)address[3]);

или

char saddr[16];
unsigned char *addr = (unsigned char*)address;

sprintf(saddr, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);

или, как указывает dreamlax:

char saddr[16];
sprintf(saddr, "%hhu.%hhu.%hhu.%hhu", address[0], address[1], address[2], address[3]);
5 голосов
/ 04 ноября 2010

IP-адрес - это просто отдельные октеты, напечатанные в виде десятичной дроби, разделенные знаком.

  printf("%d.%d.%d.%d",address[0],address[1],address[2],address[3]);

Вы, вероятно, должны сделать char address[4] 1005 *

0 голосов
/ 04 ноября 2010

Было бы еще лучше использовать% u.

...