您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页c中in6_addr地址和修改in6_addr地址

c中in6_addr地址和修改in6_addr地址

来源:爱go旅游网


in6_addr的结构体:

struct in6_addr
{
    union
    {
        uint8_t __u6_addr8[16];   // 128 bit
        #if defined __USE_MISC || defined __USE_GNU
        uint16_t __u6_addr16[8];  //  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
};

结构体中的unit8_t,unit16_t,unit32_t这三个数据类型如下:

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 

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

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

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

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


in6_addr p;
p.__in6_u.__u6_addr8[0] = 255;
p.__in6_u.__u6_addr8[1] = 255;
p.__in6_u.__u6_addr8[2] = 255;
p.__in6_u.__u6_addr8[3] = 0;
p.__in6_u.__u6_addr8[4] = 0;
p.__in6_u.__u6_addr8[5] = 255;
p.__in6_u.__u6_addr8[6] = 16;
p.__in6_u.__u6_addr8[7] = 1;
p.__in6_u.__u6_addr8[8] = 255;
p.__in6_u.__u6_addr8[9] = 17;
p.__in6_u.__u6_addr8[10] = 15;
p.__in6_u.__u6_addr8[11] = 255;
p.__in6_u.__u6_addr8[12] = 10;
p.__in6_u.__u6_addr8[13] = 10;
p.__in6_u.__u6_addr8[14] = 1;
p.__in6_u.__u6_addr8[15] = 10;

上面程序打印出来的结果就是:ffff:ff00:ff:1001:ff11:fff:a0a:10a

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务