ipv4的ip字符串转化为int型
要求:
将现有一个ipv4的ip字符串(仅包含数字,点,空格), 其中数字和点之间的空格(至多一个)是合法的,比如“12 .3. 4 .62”,其他情况均为非法地址。写一个函数将ipv4地址字符串转化成int整数(只能遍历一遍字符串)。
实现思路:
1. 安全检查,null指针
2. 排除最容易的情况:长度、首/尾是否合法
3. 遍历(第2~第len-1个元素):
数字只考虑数值计算以及是否超出范围
" "前后只能为数字和"."
"."前后分别可以为数字或" ";"."不能超过3个;更新数组索引
#include<stdio.h>
#include<string.h> int is_digit(char ch)
{
return (ch>='0' && ch<='9')? 1:;
} int ipv4_to_int(char* str, int* part)
{
int len=,index=,i=;
char* ps=str; if(ps == NULL || part ==NULL)
return -; len=strlen(ps);
if(len< || len >)
return -; if(!is_digit(ps[]) || !is_digit(ps[len-]) )
return -; part[index]=part[index]*+(int)(ps[]-''); for(i=;i<len-;i++){
char ch = ps[i];
if(is_digit(ch)){
part[index]=part[index]*+(int)(ch-'');
if(part[index]>)
return -;
}
else if(ch==' ')
{
if( (is_digit(ps[i-]) && ps[i+]=='.') || \
(ps[i-]=='.' && is_digit(ps[i+])) )
continue;
else
return -;
}
else if(ch=='.')
{
if( (is_digit(ps[i-]) || ps[i-]==' ') && \
(ps[i+]==' ' || is_digit(ps[i+])) )
{
index++;
if(index>)
return -;
}
else
return -;
}
else
return -;
} part[index]=part[index]*+(int)(ps[i]-'');
if(part[index]>)
return -; return ;
} int main(int argc, char *argv[])
{
char exm[][]={
"255.255.255.255",
"0.0.0.0",
"12 .3. 4 .56",
{},
"2.3..",
"121 . 234 . 114 . 115.",
".12.4.7.7",
"123.34.55.",
"1.3.5.4.2.4",
" 123.3.4.5",
"123.45.67.67 ",
"12 3. 45.67. 67",
"12.256.0.1",
"A1.34.45.6",
"34.56.-2.5",
". . .",
}; int part[]={,,,};
int j=;
for(j=;j<;j++){
if(!ipv4_to_int(exm[j], part))
printf("ip_addr: %30s is <OK> ====> %d.%d.%d.%d\n",exm[j], part[],part[],part[],part[]);
else
printf("ip_addr: %30s is Invalid !!!\n",exm[j]); part[]=part[]=part[]=part[]=;
}
return ;
}
欢迎大家批评指正!! :-)
ipv4的ip字符串转化为int型的更多相关文章
- C++ 字符串分割,并把子字符串转换成int型整数
主要涉及到string类的两个函数find和substr: find()函数的用法: 原型:size_t find ( const string& str, size_t pos = 0 ) ...
- C语言:将16进制字符串转化为int类型值
将16进制字符串值转换为 int 整型值 此例中用 "1de" 作为测试字符串,实现代码如下: #include <stdio.h> #include <stdl ...
- 数组转集合、集合转数组、字符串数组与int型、long型数组等的转换
在项目中经常会遇到数组转集合.集合转数组.数组之间类型转换等操作 1.数组转集合 为了实现把一个数组转换成一个ArrayList,很多Java程序员会使用如下的代码: String str[] = { ...
- C语言atoi函数(将字符串转化为int)
头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为:int atoi (const char * str); [函数说明]atoi ...
- 字符串转化为int数组
String a = "1,2,3,4,5,6" String str[] = a.split(","); int array[] = new int[str. ...
- sql把varchar转化为int型
select Max(convert(int,id))from member_Info;
- c# sql在where查询语句中使用字符串变量与int型变量
使用where语句访问数据库时where语句用上文中以及定义过的变量来查询. string sql3 = string.Format("update Ships set ContainerN ...
- loadrunner 脚本开发-int型变量和字符串的相互转换
脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...
- 关于如何将_variant_t型转化为int型和string类型
1)将_variant_t型转化为int型 关于将_variant_t型转化为int型,网上有好多好多参考,但好多都很复杂并且还不对,其实整个转化过程就只一行代码可以搞定: _variant_t a; ...
随机推荐
- 下载win10系统
有时候想重装系统但总找不到下载的地方,今天记录一下.nsdn我告诉你,这里有许多软件下载 网站URL:https://msdn.itellyou.cn/ 我想下载一个Windows10 磁力地址 ed ...
- logger(三)log4j2简介及其实现原理
一.log4j2简介 log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步.等等),使得日志的吞吐量.性能比log4j 1.x提高10倍,并解决了一些死锁的bug, ...
- Spark GraphX图计算核心算子实战【AggreagteMessage】
一.简介 参考博客:https://www.cnblogs.com/yszd/p/10186556.html 二.代码实现 package graphx import org.apache.log4j ...
- ASP.NET Core MVC 502 bad gateway 超时如何处理
在网页程序运行需要较长时间运行的时候,ASP.NET Core MVC会出现502 bad gateway请求超时情况.一般默认的超时时间都比较短,我们需要在 web.config 中配置一下.其中 ...
- k8s控制器资源(五)
Pod pod在之前说过,pod是kubernetes集群中是最小的调度单元,pod中可以运行多个容器,而node又可以包含多个pod,关系如下图: 在对pod的用法进行说明之前,有必要先对docke ...
- java 深copy
public static<T> T deepClone(T src) throws IOException, ClassNotFoundException { Object obj = ...
- html--前端css样式初识
一.CSS概述 css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化,CSS的可以使页面更加的美观.基本上所有的html页面都或多或少的使用css. CS ...
- React的使用小规范----长期更新
用this.state控制组件显示,用this.props控制页面业务数据,用this.other保存其他需要的属性,如计时器setInterval的id
- ESA2GJK1DH1K升级篇: 关于升级篇数据校验
前言 鉴于大家都希望升级的时候加入数据校验,所以就满足大家的要求. 其实我也希望自己做的足够的稳定可靠,让大家使用起来放心. 上一节测试了一节加入校验以后的操作方式,这节来详细的说一下校验部分的代码. ...
- django -- ORM实现作者增删改查
前戏 前面我们已经实现了出版社的增删改查,书的增删改查,书和出版社的对应关系.现在来写一下作者的增删改查和书的对应关系,那书和作者有什么关系呢?一个作者可以写多本书,一本书可以有多个作者,所以书和作者 ...