如何将字符串转换为 IP 地址,反之亦然

新手上路,请多包涵

如何转换字符串 ipAddress (struct in_addr),反之亦然?以及如何上交无符号长 IP 地址?谢谢

原文由 Safari 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

如果您需要其他方式,请使用 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"

原文由 Milan 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以在 Windows 上使用 netdb.h winsock2.h 中定义的两个函数,在 Linux 上使用 — 中定义的两个函数

WSAStringToAddressA (用于将字符串转换为地址)

WSAAddressToStringA (用于将地址转换为字符串)

这两个功能的最佳之处在于它们适用于每个地址系列

WSAStringToAddressA

这个函数有五个参数

•数组指针或 char 数组的指针包含你的地址

•您的地址的地址族(仅在参数 3 为 NULL 使用)

WSAPROTOCOL_INFO 结构提供有关您的协议的信息,如果您想使用参数 2,请留空

•指向 sockaddr 结构的指针,结果地址必须存储在其中

DWORD 类型对象的指针,您的地址的结果长度必须存储在其中

WSAAddressToStringA

这个函数也有五个参数

•指向需要翻译的 sockaddr 结构的指针

•地址的字节长度

•结构 WSAPROTOCOL_INFO 提供有关地址协议的信息。使用 NULL 使函数在参数 1 中使用 sockaddr 结构的地址族

•数组 char 必须以字符串形式存储地址

•您的地址的字符串形式的长度(以字节为单位)

例子

#define _WIN32_INNT 0x601

#include <iostream>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <ws2spi.h>

int main()
{
    WSADATA wsd;
    WSAStartup(MAKEWORD(2,2),&wsd);
    char *addr="127.0.0.1";
    sockaddr h;
    int i;
    WSAStringToAddressA(addr,AF_INET,NULL,&h,(DWORD*)&i);
    char addr2[INET_ADDRSTRLEN];
    int i2;
    WSAAddressToStringA(&h,i,NULL,addr,(DWORD*)&i2);
    std::cout<<addr2;
}

结果

127.0.0.1

原文由 Legendgamer 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题