我有一个关于使用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;
答案 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)。