使用winsock.h与ipv4整数

时间:2013-04-17 17:45:16

标签: c windows ipv4

我有一个关于使用union库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;

2 个答案:

答案 0 :(得分: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号转换为字符串。

答案 1 :(得分: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)。