C++ 等同于inet_aton的windows

C++ 等同于inet_aton的windows,c++,linux,unix,C++,Linux,Unix,我正在将一些为linux系统编写的代码转换为windows系统。我使用的是Windows系统的C++,想知道函数iNETAOTAN的等价性。 < P>它是Windows等效的,而不是C++等价的,但可能你想要的是代码> INETAUDADD< /COD>,我相信它早在代码> INETAYOTAN 和哪些Windows支持。 这篇文章还在“请参阅”部分列出了一整套详细命名的函数,用于处理IPv6地址等。Windows支持,它具有与inet\u aton类似的接口(但也适用于IPv6地址)。只需提

我正在将一些为linux系统编写的代码转换为windows系统。我使用的是Windows系统的C++,想知道函数iNETAOTAN的等价性。

< P>它是Windows等效的,而不是C++等价的,但可能你想要的是代码> INETAUDADD< /COD>,我相信它早在代码> INETAYOTAN 和哪些Windows支持。

这篇文章还在“请参阅”部分列出了一整套详细命名的函数,用于处理IPv6地址等。

Windows支持,它具有与
inet\u aton
类似的接口(但也适用于IPv6地址)。只需提供
AF\u INET
作为第一个参数,否则它将像
INET\u aton
一样工作


(如果您可以更改Linux源代码,
inet\u pton
也将在那里工作)。

要在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上改用
WSAStartup
WSAStartup
也是必需的)。它支持
255.255.255.255
0.0.0
。它不支持字段数小于4的IPv4地址字符串。如果
WSAStringToAddressA
失败(例如IPv4地址字符串的字段数小于4),则调用
inet\u addr
作为回退。

一旦我使用inet\u addr并使用返回值设置in\u addr结构的S\u addr成员,则结构的其他两个联合成员是什么?我不太确定这些(S_un_b和S_un_w)需要设置为什么。我假设我可以使用sockaddr结构类型而不是sockaddr_in类型,因此不需要担心S_un_b和S_un_w……尽管我仍然想知道它们的用途。谢谢。我也不知道为什么我忽略了这是一个联盟的事实。我想不需要进一步的解释了。如果你想以某种方式操纵地址,那么工会的其他成员会支持你,这样你就可以一个字节一个字节地查看地址了。在Windows上,这是有意义的,因为Windows始终是little endian。不过,您很少需要这样做:我想最常见的操作应该是应用网络掩码,而您不需要字节访问,但它仅适用于Vista及更高版本。在Windows XP上,它将无法加载。