【发布时间】:2010-03-10 21:18:41
【问题描述】:
我正在将一些为 linux 系统编写的代码转换为 windows 系统。我在我的 Windows 系统中使用 C++,想知道函数 inet_aton 的等价物。
【问题讨论】:
我正在将一些为 linux 系统编写的代码转换为 windows 系统。我在我的 Windows 系统中使用 C++,想知道函数 inet_aton 的等价物。
【问题讨论】:
Windows 支持inet_pton,它具有与inet_aton 类似的接口(但也适用于 IPV6 地址)。只需提供AF_INET 作为第一个参数,否则它将像inet_aton 一样工作。
(如果您可以更改 Linux 源,inet_pton 也可以在那里工作)。
【讨论】:
它是 Windows 等价物,而不是 C++ 等价物,但您可能想要 inet_addr,我相信它早于 inet_aton,并且 Windows 支持。
http://msdn.microsoft.com/en-us/library/ms738563.aspx
那篇文章还在“另见”部分列出了用于处理 IPv6 地址等的完整的详细命名函数集。
【讨论】:
要在 Windows XP 中运行,您可以尝试以下检查:
#pragma comment(lib, "Ws2_32.lib")
sockaddr_in inaddr;
#ifdef _WIN32_WINNT 0x0501
inaddr.sin_addr.s_addr =inet_addr("10.10.10.10"); //for XP
#else
inet_pton(AF_INET, "10.10.10.10", &inaddr.sin_addr.s_addr); //for Vista or higher
#endif
【讨论】:
考虑在 Windows XP 上使用 WSAStringToAddressA 代替(WSAStartup 也是必需的)。它支持255.255.255.255 和0.0.0.0。它不支持字段数小于 4 的 IPv4 地址字符串。如果 WSAStringToAddressA 失败(例如 IPv4 地址字符串的字段数小于 4),则调用 inet_addr 作为备用。
【讨论】: