IPv4 地址是以点分十进制表示形式来表示的。对于 IPv6,128 位的地址是按每 16 位 1 个分界线来分隔的,每个 16 位块转换成 4 个十六进制数(基16 计数系统),相邻的 16 位块以半角冒号隔开。生成的表示形式叫做冒号十六进制表示形式。
下面是一个二进制形式的 IPv6 地址:
0011111111111110001010010000000011010000000001010000000000000000
0000001010101010000000001111111111111110001010001001110001011010
每 16 位用 1 个分界线来分割此 128 位地址:
0011111111111110   0010100100000000   1101000000000101   0000000000000000  0000001010101010   0000000011111111   1111111000101000   1001110001011010    
每个 16 位块都转换成十六进制,相邻的块用半角冒号隔开。结果为:
3FFE:2900:D005:0000:02AA:00FF:FE28:9C5A
通过删除每个 16 位块内的前导零,还可以进一步简化 IPv6 表示形式。不过,每个块必须最少有一个数字。删除前导零后,此地址就变成了:
3FFE:2900:D005:0:2AA:FF:FE28:9C5A

在二进制数和十六进制数之间转换

十六进制计数系统在表示一个数时使用数字 0 至 9,字母 A、B、C、D、E 和 F,以及 16 的指数幂。表 3-4 列出了数字 0 至 15 的十进制、十六进制和二进制表示形式。
十进制 十六进制 二进制
0
0
0000
1
1
0001
2
2
0010
3
3
0011
4
4
0100
5
5
0101
6
6
0110
7
7
0111
8
8
1000
9
9
1001
10
A
1010
11
B
1011
12
C
1100
13
D
1101
14
E
1110
15
F
1111
表 3-4  十进制、十六进制和二进制之间的转换
要将十六进制数转换成二进制数,应将每个十六进制数字转换成对等的 4 位二进制数字。例如,要将十六进制数 0x03D8 转换成二进制,应将各个十六进制数字(0、3、D 和 8)分别转换成二进制。这样,0x03D8 就是 0000 0011 1101 1000 或 0000001111011000。
要将二进制数转换成十六进制数,应从低序位开始将二进制数分割成包含 4 位的块。然后,将每个包含 4 位的块转换成与其相等的十六进制形式。例如,要将二进制数 0110000110101110 转换成十六进制,应首先将整个数分割成 4 位一块的数字块,即 0110 0001 1010 1110。然后,将每块转换成十六进制数字,即 0x61AE。
虽然您可以使用 Windows Server 2003 或 Windows XP 中的计算器在十六进制和二进制之间进行转换,但如果您手动执行转换会帮助您更好地理解此操作。要在十进制和十六进制之间进行转换(IPv6 地址不需要经常执行此操作),请使用 Windows 计算器。

压缩零

某些类型的地址包含一长串零。要进一步简化 IPv6 地址的表示形式,您可以将以冒号十六进制格式表示的一串连续的、设置为 0 的 16 位块压缩成“::”(叫做双冒号)。
例如,您可以将单播 IPv6 地址 FE80:0:0:0:2AA:FF:FE9A:4CA2 压缩成 FE80::2AA:FF:FE9A:4CA2,可以将多播 IPv6 地址 FF02:0:0:0:0:0:0:2 压缩成 FF02::2。
您只能使用零压缩来压缩以冒号十六进制表示形式表示的一个连续的 16 位块序列。您不能对 16 位块的一部分进行零压缩。例如,您无法将 FF02:30:0:0:0:0:0:5 表示为 FF02:3::5。
要确定“::”代表多少位零,您可以计算压缩地址中的块数,用 8 减去此数,然后将结果乘以 16。例如,地址 FF02::2 有两个块(“FF02”块和“2”块),这意味着其他六个 16 位块(总共 96 位)已被压缩。
在一个给定的地址中,您只能使用一次零压缩。否则,您就无法确定每个“::”代表多少位零。如果一个地址包含同样长的两个零块序列,则应通过转换将左边的零块序列表示为“::”。