我正在使用C在Windows上学习网络。我遇到了IN6_ADDR
结构,它将IPv6地址表示为2个阵列的联合:
typedef struct in6_addr {
union {
UCHAR Byte[16];
USHORT Word[8];
} u;
} IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
我无法理解为什么有人想要2个数组的联合而不是1个数组。作出这种声明的原因是什么?请注意,这两个数组都是128位长。
IPv6地址通常以使用2字节组的格式编写,例如
2001:0db8:85a3:0000:0000:8a2e:0370:7334
这些组中的每一个对应于CCD_ 2阵列的一个元素。
但有时处理地址的每个字节也很有用。在这种情况下,您将使用Byte
数组,而不必移动和屏蔽Word
的元素。
IPv6地址通常表示为一组16位值,例如:
2001:0db8:0000:0000:0000:8a2e:0370:7334
Word
成员允许您单独读取这些16位字,而不是一次读取单个字节。