-1

我有一个关于使用联合库winsock.h将数字转换为ipv4地址的问题如何写?

#ifdef obsolete
        union {
                struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { u_short s_w1,s_w2; } S_un_w;
                u_long S_addr;
        } S_un;
4

2 回答 2

1

这是一种方法:

S_un addr;

addr.S_addr = htonl( 2655715960 );

printf("%hhu.%hhu.%hhu.%hhu  %hhX:%hhX:%hhX:%hhX \n",
       addr.S_un_b.s_b1, addr.S_un_b.s_b2, addr.S_un_b.s_b3, addr.S_un_b.s_b4,
       addr.S_un_b.s_b1, addr.S_un_b.s_b2, addr.S_un_b.s_b3, addr.S_un_b.s_b4 );

幻数2655715960是您评论中的示例输入值。代码将打印想要的行:

158.75.2.120  9E:4B:2:78

注意:使用十六进制打印 IPv4 地址并不常见。

注 2:使用struct in_addr代替S_un. 因此,您可以使用inet_ntoa将 IP 号转换为字符串的函数。

于 2013-04-17T19:57:14.303 回答
0

使用我的魔法玻璃球,我试图猜测这里问的是什么:

sockaddr_storage可以使用 IPv4 和 IPv6 地址。

ss_family表示里面存放的是什么。

根据它的设置,它是sockaddr_in(对于 IPv4)或sockaddr_in6(对于 IPv6)(http://msdn.microsoft.com/en-us/library/windows/desktop/ms740496(v=vs.85).aspx)。

于 2013-04-17T17:52:08.240 回答