曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3529|回复: 0
打印 上一主题 下一主题

为什么将 INET6_ADDRSTRLEN 定义为 46

[复制链接]

4917

主题

5879

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34382
跳转到指定楼层
楼主
发表于 2015-3-30 16:18:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
INET6_ADDRSTRLEN  这个值定义在 /usr/include/netinet/in.h 中有定义:
  1. #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 了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-28 07:13 , Processed in 0.060574 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表