c中in6_addr地址

in6_addr的结构体:

typedef unsigned char           uint8_t;  
typedef unsigned short int      uint16_t;  
#ifndef __uint32_t_defined  
typedef unsigned int            uint32_t;  
# define __uint32_t_defined  
#endif 

struct in6_addr
{
    union
    {
        uint8_t __u6_addr8[16];   // 128 bit
        #if defined __USE_MISC || defined __USE_GNU
        uint16_t __u6_addr16[8];  // 64 bit
        uint32_t __u6_addr32[4];  // 32 bit
        #endif
    } __in6_u;
    #define s6_addr         __in6_u.__u6_addr8
    #if defined __USE_MISC || defined __USE_GNU
    # define s6_addr16      __in6_u.__u6_addr16
    # define s6_addr32      __in6_u.__u6_addr32
    #endif
};

要想在程序中实现改变ipv6地址的功能,只需要改变in6_addr中u里面的__u6_addr8这个数组里面的内容。

ipv6的格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:z的地址是ABCD:EF01:2345:6789:ABCD:EF01:2345:6789

__u6_addr8这个数组里面一共有16个元素,那么平均分配下来每两个元素表示一个X,也就是16b。

__u6_addr8[0]和__u6_addr8[1]代表z地址中第一个16位中的AB和CD。

__u6_addr8[2]和__u6_addr8[3]代表z地址中第二个16位中的EF和01。

__u6_addr8[4]和__u6_addr8[5]代表z地址中第三个16位中的23和45。

以此类推,__u6_addr8数组正好能够将所有的位数都表示。

因为是16进制,所以逢16进1。如果__u6_addr8[0] = 16,__u6_addr8[1] = 10,那么前16位就是:100a。

数组元素里面最大是255,因为两位16进制的数能够表示最大的数就是ff。

转自《c中in6_addr地址和修改in6_addr地址》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值