曲径通幽论坛
标题:
为什么将 INET6_ADDRSTRLEN 定义为 46
[打印本页]
作者:
beyes
时间:
2015-3-30 16:18
标题:
为什么将 INET6_ADDRSTRLEN 定义为 46
INET6_ADDRSTRLEN 这个值定义在 /usr/include/netinet/in.h 中有定义:
#define INET6_ADDRSTRLEN 46
复制代码
那么它为什么定义为 46 呢?
首先需要了解的是,这个值一般会和 inet_ntop() 函数一起使用的,它的这个 46 长度表示的是 IPv6 网络地址的可读化长度。总所周知,一个 IPv6 地址是 128 位,供 16 个字节,为了便于阅读查看,会写成 8 组,每组 4 个十六进制数,每组之间用冒号隔开。对于一般的 IPv6 地址的记法来说,是 4*8 + 7 = 39 个。
但考虑到 IPv6 隧道的情况,也就是 IPv4 镜像地址,如有地址 ::ffff:192.168.89.9 ,完整的写法是 0000:0000:0000:0000:0000:ffff:c0a8:5909 ,也就是
0000:0000:0000:0000:0000:ffff:192.168.89.9
。算一下这里一共能容纳多少个字符:
[quote] (4*6 + 5) + 1 + 3*4 + 3 = 29 + 1 + 15 = 45 ;另外算上一个末尾的 NULL,长度就是 46 了。
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/)
Powered by Discuz! X3.2