我知道ntoh{s,l}
and hton{s,l}
,适用于 2 和 4 字节的整数。
现在,我面临着转换 16 个字节长的 IPv6 地址的问题。
是否有用于此目的的现成函数?
TIA,
Jir
我不确定ntoh
and hton
与 IPv6 相关。您没有本机 128 位类型,是吗?
根据http://www.mail-archive.com/[电子邮件受保护]/msg00195.html http://www.mail-archive.com/users@ipv6.org/msg00195.html:
IPv6 地址预计为
以网络字节顺序表示
每当它们是二进制形式时(在
电线,在主机上,在路由器中,
ETC)。除其他地方外,请参阅 RFC
2553,第 3.2 节。
From RFC 2553 http://www.ietf.org/rfc/rfc2553.txt:
3.2 IPv6地址结构
新的 in6_addr 结构保存单个 IPv6 地址,并通过包含以下内容来定义:
struct in6_addr {
uint8_t s6_addr[16]; /* IPv6 address */
};
该数据结构包含一个由 16 个 8 位元素组成的数组,组成一个 128 位 IPv6 地址。 IPv6 地址以网络字节顺序存储。
上面的结构 in6_addr 通常使用带有额外字段的嵌入式联合来实现,这些字段以类似于“struct in_addr”的 BSD 实现的方式强制所需的对齐级别。为了简单起见,此处省略了这些额外的实现细节。
示例如下:
struct in6_addr {
union {
uint8_t _S6_u8[16];
uint32_t _S6_u32[4];
uint64_t _S6_u64[2];
} _S6_un;
};
#define s6_addr _S6_un._S6_u8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)