c中in6_addr地址和修改in6_addr地址
2016-07-22 10:31
666 查看
in6_addr的结构体:
结构体中的unit8_t,unit16_t,unit32_t这三个数据类型如下:
要想在程序中实现改变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。
上面程序打印出来的结果就是:ffff:ff00:ff:1001:ff11:fff:a0a:10a
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 };
结构体中的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
要想在程序中实现改变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。
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
相关文章推荐
- DOS下mysql 基本命令
- @RequestMapping测试各种访问方式
- 机器学习之k近邻法
- AngularJS 指令
- 国内一线互联网公司面试题库
- Unity全面的面试题(包含答案)
- Python 3.x-解决unable to find vcvarsall.bat问题
- Swift GCD
- Java IO 操作(一)
- 【几何】平面线段交
- 智慧旅游垂直入口__游侃天下(一)
- C# xml文档读写
- HDU 5735 Born Slippy
- 文章标题
- Android应用开发SharedPreferences存储数据的使用方法
- Libevent学习:介绍与安装
- Scala数组操作
- Titan-红号楼宗谱案例
- 回车与换行的区别
- Java序列化的机制和原理