Как преобразовать строку в IP-адрес и наоборот

как я могу преобразовать строку ipAddress (struct in_addr) и наоборот? и как мне включить unsigned long ipAddress? благодаря

Используйте inet_ntop() и inet_pton() если вам это нужно по-другому. Не используйте inet_ntoa(), inet_aton() и аналогичные, поскольку они устарели и не поддерживают ipv6.

Вот хороший справочник с несколькими примерами.

 // IPv4 demo of inet_ntop() and inet_pton() struct sockaddr_in sa; char str[INET_ADDRSTRLEN]; // store this IP address in sa: inet_pton(AF_INET, "192.0.2.33", &(sa.sin_addr)); // now get it back and print it inet_ntop(AF_INET, &(sa.sin_addr), str, INET_ADDRSTRLEN); printf("%s\n", str); // prints "192.0.2.33" 

Я не уверен, правильно ли понял вопрос.

В любом случае, вы ищете это:

 std::string ip ="192.168.1.54"; std::stringstream s(ip); int a,b,c,d; //to store the 4 ints char ch; //to temporarily store the '.' s >> a >> ch >> b >> ch >> c >> ch >> d; std::cout << a << " " << b << " " << c << " "<< d; 

Вывод:

 192 168 1 54 

Мне удалось преобразовать строку в DWORD и обратно с помощью этого кода:

 char strAddr[] = "127.0.0.1" DWORD ip = inet_addr(strAddr); // ip contains 16777343 [0x0100007f in hex] struct in_addr paddr; paddr.S_un.S_addr = ip; char *strAdd2 = inet_ntoa(paddr); // strAdd2 contains the same string as strAdd 

Я работаю в проекте обслуживания старого кода MFC, поэтому преобразование устаревших вызовов функций неприменимо.

inet_ntoa() преобразует in_addr в строку:

Функция inet_ntoa преобразует сетевой адрес сети (Ipv4) в строку ASCII в стандартном формате десятичной точки в формате Internet.

inet_addr() выполняет обратное задание

Функция inet_addr преобразует строку, содержащую десятичный адрес IPv4, в правильный адрес для структуры IN_ADDR

PS это первый результат googling «in_addr to string»!

Чтобы преобразовать строку в in-addr:

 in_addr maskAddr; inet_aton(netMaskStr, &maskAddr); 

Чтобы преобразовать in_addr в строку:

 char saddr[INET_ADDRSTRLEN]; inet_ntop(AF_INET, &inaddr, saddr, INET_ADDRSTRLEN); 

В этом примере показано, как преобразовать из строки в ip и наоборот:

 struct sockaddr_in sa; char ip_saver[INET_ADDRSTRLEN]; // store this IP address in sa: inet_pton(AF_INET, "192.0.1.10", &(sa.sin_addr)); // now get it back sprintf(ip_saver, "%s", sa.sin_addr)); // prints "192.0.2.10" printf("%s\n", ip_saver); 

Третий параметр inet_pton является указателем на структуру in_addr . После успешного вызова in_addr структура in_addr будет заполнена адресной информацией. Поле S_addr структуры содержит IP-адрес в сетевом порядке байтов (обратный порядок).

  • Есть ли недостатки для передачи структур по значению в C, а не для передачи указателя?
  • ARC запрещает объекты Objective-C в структурах или объединениях, несмотря на маркировку файла -fno-objc-arc
  • Быстрые константы: Struct или Enum
  • Почему я не могу скопировать инициализацию структуры, полученной из другой структуры?
  • Несовместимое неявное объявление встроенной функции 'malloc'
  • C: sizeof single struct member
  • Является ли размер структуры требуемым, чтобы быть точным кратным выравниванию этой структуры?
  • Вызывать функцию golang struct дает «не может ссылаться на невыполненное поле или метод»
  • Почему «typdef struct {struct S * s; } S; ", содержащий указатель на компиляцию того же типа?
  • Какая польза для тегов в Go?
  • Назначить одну структуру другому в C
  • Давайте будем гением компьютера.