c中in6_addr地址和修改in6_addr地址
来源:互联网 发布:高校教师招聘考试知乎 编辑:程序博客网 时间:2024/06/06 03:14
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]; // 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
0 1
- c中in6_addr地址和修改in6_addr地址
- redefinition of `struct in6_addr' 的解决办法
- truct in6_addr has no member named in6_u
- C语言中变量和变量地址
- C 语言实现linux读取和修改IP地址
- Eclipse中修改SVN地址
- 修改注册表中“本地连接”的Ip和网卡地址
- 修改eclipse中settings.xml和默认资源库保存地址
- 编译openssl库时出现“error C2027: use of undefined type 'in6_addr'”的解决方法
- C和C++中指针和地址的区别
- linux C 获取与修改IP地址
- inux C 获取与修改IP地址
- linux C 获取与修改IP地址
- linux C 获取与修改IP地址
- linux C 获取与修改IP地址
- C中使用正则表达式验证email地址和IP地址
- C和VC中分配变量地址的问题
- C和C++中指针与地址的区别
- CentOS7YUM安装redis数据库及php-redis扩展
- [VB]SqlHelper|DBHelper数据通用访问类 for VB
- PL/SQL直接在表上修改数据
- 2016 杭电多校2解题报告
- Android studio运行JNI程序以及生成.so文件(Windows下)
- c中in6_addr地址和修改in6_addr地址
- HTML5笔记四:文件及图像上传
- dbus-python 指南
- Log4net的<appender>配置实例
- javabean,servlet,jsp区别联系
- 4.基于数据库表进行认证
- Codeforces Round #325 (Div. 2)
- 表单input中disabled提交后得不到值的解决办法
- 透过硅谷工程师文化看顾问的职业常青