我开发了一个网络应用程序并使用套接字 API。
我想设置sockaddr_in6结构的sin6_addr字节顺序。
对于 16 位或 32 位变量,很简单:使用 htons 或 htonl:
// IPv4
sockaddr_in addr;
addr.sin_port = htons(123);
addr.sin_addr.s_addr = htonl(123456);
但对于 128 位变量,我不知道如何将字节顺序设置为网络字节顺序:
// IPv6
sockaddr_in6 addr;
addr.sin6_port = htons(123);
addr.sin6_addr.s6_addr = ??? // 16 bytes with network byte order but how to set?
有些答案可能是使用 htons 8 次(2 * 8 = 16 字节),或者使用 htonl 4 次(4 * 4 = 16 字节),但我不知道哪种方式是正确的。
Thanks.
The s6_addr
成员struct in6_addr
定义为:
uint8_t s6_addr[16];
由于它是一个数组uint8_t
,而不是单个 128 位整数类型,不会出现字节序问题:您只需从源中复制uint8_t [16]
数组到目的地。例如,复制地址2001:888:0:2:0:0:0:2
你会使用:
static const uint8_t myaddr[16] = { 0x20, 0x01, 0x08, 0x88, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
memcpy(addr.sin6_addr.s6_addr, myaddr, sizeof myaddr);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)