1.判断IPV6地址格式是否正确

此功能代码实现判断IPV6地址是否正确,正确返回1,错误误返回0。
#define  H(x)  ((unsigned char *) & (x) )[0]
#define  L(x)  ((unsigned char *) & (x) )[1]//char * abbr, ipv6字符串
//unsigned char * ret_buff,返回和引用的buff
//return 传入buff的指针
int  CGlobalLogic::ipv6_to_u (char * abbr,unsigned char * ret_buff)
{char  buff[40]={0};int  ipv6_int[8]={0};int  two_colon = -1;int  ipv6_char_len = strlen(abbr);assert(abbr!=NULL && ret_buff!=NULL);//查找是否有缩写的情况//   two_colon=abbr.find_first_of("::");if((ipv6_char_len<3 )  ||(abbr[0] ==':' && abbr[1]!=':') ||(abbr[ipv6_char_len-1]==':' && abbr[ipv6_char_len-2]!=':' )){printf("Invalid ipv6 addr[%s]!",abbr);return 0;}for (int i=0;i<ipv6_char_len;i++){if (!((abbr[i]>='0'&&abbr[i]<='9')||(abbr[i]>='a'&&abbr[i]<='f')||(abbr[i]>='A'&&abbr[i]<='F')||abbr[i] == ':')){printf("Invalid ipv6 addr[%s]!",abbr);return 0;}}for(int i=0,j=0;i<ipv6_char_len;i++){if(abbr[i]!=':'){j++;}else{j=0;}if(abbr[i] == ':' && abbr[i+1] == ':'){if(two_colon == -1){two_colon =i;}else{printf("Invalid ipv6 addr[%s],:: appears once!",abbr);return 0;}}if(j>4){printf("Invalid ipv6 addr[%s], every 2Bytes not more than 4 chars!",abbr);return 0;}}//处理缩写的情况.if(two_colon>=0){int pos = 0;int start_colon_num = 0;int end_colon_num = 0;int  add_colon_num = 0;//找:: 前面:的个数for(int i=0;i<two_colon;i++){if(abbr[i] == ':' ){start_colon_num ++;}}//找:: 后面:的个数for(int i=two_colon+2;i<ipv6_char_len;i++){if(abbr[i] == ':' ){end_colon_num ++;}}//计算需要添加 "0:" 的个数,总共只有7个冒号.add_colon_num = 7 - start_colon_num - end_colon_num ;for(pos =0;pos <two_colon;pos ++){buff[pos] = abbr[pos];}while(add_colon_num>0){buff[pos++] =':';add_colon_num --;if(add_colon_num!=0)buff[pos++] ='0';}for(int i=two_colon+2; i<ipv6_char_len; ){buff[pos++] = abbr[i++];}buff[pos] = ' ';}//endelse //标准格式{if(two_colon == -1){strncpy(buff,abbr,ipv6_char_len);}}//   printf("%s",buff);int colon_num = sscanf (buff,"%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x",&ipv6_int[0],&ipv6_int[1],&ipv6_int[2],&ipv6_int[3],&ipv6_int[4],&ipv6_int[5],&ipv6_int[6],&ipv6_int[7]);if(colon_num<=0 || (two_colon==-1 && colon_num !=8 )){printf("Invalid ipv6 addr [%s] format!",abbr);return 0 ;}
#if 0printf("colon_num:%d,two_colon:%d",colon_num,two_colon);for(int k=0;k<8;k++){printf("%3d,",ipv6_int[k]);}
#endif//获取标准化后的值for(int i=0;i<8;i++){ret_buff[i*2] = L(ipv6_int[i]);ret_buff[i*2+1] = H(ipv6_int[i]);}return 1;
}

判断IPV6地址格式是否正确相关推荐

  1. 判断输入的Email地址格式是否正确

    请问:我想判断从文本框中输入的Email地址格式是否正确应该怎么实现? hmhz 发表于 2008-12-9 09:36 使用正则 <% Function isemail(strng) isem ...

  2. IPV6地址格式分析

    IPV6地址格式分析 IPv6的地址长度是128位(bit). 将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开. 例如:2000:0000:0000:0000:00 ...

  3. golang 检查ip地址格式 是否正确

    示例如下: package mainimport ("net""fmt" )func main() {ipv4 := "12.56.30.88&quo ...

  4. IPv6地址格式统一工具类

    1.说明 一个IPv6地址可以有多种文本格式, 如下所示: 2001:db8:0:0:1:0:0:1 2001:0db8:0:0:1:0:0:1 2001:db8::1:0:0:1 2001:db8: ...

  5. go检查ip地址格式是否正确

    2019 年 2 月 3 日 春节放假 第二天,终于有比较清闲的时间了,今天来更新一下博客关于使用go 如何 检查ip 地址是否是正确的格式的,比如 15.69.00.5 还有 10.23.76.25 ...

  6. 正则判断 手机邮箱的正确格式

    // 正则判断手机号码地址格式 +(BOOL) isMobileNumber:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8],135,136,137, ...

  7. php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)...

    /*** 表单校验函数库*//*** 判断email格式是否正确* @param $email*/ function is_email($email) {return strlen($email) & ...

  8. 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确 要求:长度不能超过15,@前面不能用字母 正确格式2156636@qq.com

    package com.coding.syudy05; /*** 输入一个QQ邮箱或者网易邮箱,判断其格式是否正确* 要求:长度不能超过15,@前面不能用字母* 正确格式2156636@qq.com* ...

  9. python判断用户名密码是否正确_python实现用户名密码校验

    本文实例为大家分享了python实现用户名密码校验的具体代码,供大家参考,具体内容如下 需要实现功能 输入用户名密码 : 认证成功后显示 欢迎信息 : 连续输错三次后 锁定 : readme: 具体请 ...

最新文章

  1. Python快速教程博客园地址
  2. 做创业者的老婆,一定要注意股权分配的3个坑
  3. python使用matplotlib绘图sigmoid_使用matplotlib库绘制函数图
  4. python3默认使用的编码是_python3里的中文编码是什么?
  5. u盘装系统学计算机好,教你如何使用u盘做系统
  6. mysql 唯一索引 死锁_MySQL 死锁套路:唯一索引 S 锁与 X 锁的爱恨情仇
  7. PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机
  8. 我的家庭私有云计划-10
  9. linux下查看一个进程的启动时间和运行时间
  10. 工具丨超好用的免费AWR分析工具
  11. c++检测固定usb端口有无设备接入_电脑USB技术白皮书
  12. java foreach 赋值_java foreach 使用
  13. 微信小游戏开发-飞机大战【源码赠送】
  14. PanDownload复活了!60MB/s!
  15. 罗技键盘鼠标接收器丢了 怎么连接别的接收器
  16. 49个excel常用技巧(一)
  17. IT行业前景真的好吗_转IT学什么语言好?
  18. Android端如何简单的防黑产
  19. 【POJ1021】Intervals (最短路解差分约束)
  20. Windows-dos命令

热门文章

  1. 用python查询B站up主的关注时间、关注了多久
  2. 【数据挖掘】BPNN初步应用-MNIST数据集
  3. 微信小程序+java后台+云服务器开发学习记录
  4. oracle用scott编写包头包体,最新《Oracle数据库应用》-练习题2资料
  5. Excel如何批量插入多个空行
  6. 珠峰新高程:8844.43米
  7. NLOG 最长不下降子序列
  8. python之json序列化与反序列化
  9. OpenCV中的超分辨率
  10. Swift-类和结构体