在长字符串中提取IP地址

void getHostIP(char* hostIP,const char* sourceStr)
{
 char nbuf[4];
 int sn[4];
 int i,ret,start,n,m;
 int runnum=0;
 start = 0; 

 while (1)
 {  
  runnum++;
  //第一个数大于255的情况
  if (runnum > 1)
  {
   ret=RE_ERR;
   for (i=start+1;i<strlen(sourceStr);i++)
   {
    if (sourceStr[i]<'1' || sourceStr[i]>'9')
    {
     start = i;
     ret=RE_OK;
     break;
    }
   }

   if(ret==RE_ERR)
   {
    break;
   }
  }  

  //查找第一个数为数字的 
  ret=RE_ERR;
  for (i=start;i<strlen(sourceStr);i++)
  {
   if (sourceStr[i]>='1' && sourceStr[i]<='9')
   {
    start = i;
    ret=RE_OK;
    break;
   }
  }

  if(ret==RE_ERR)
  {
   break;
  }

  //在剩余的字串中是否含有三个点
  n=0;
  for (i=start;i<strlen(sourceStr);i++)
  {
   if (sourceStr[i]=='.')
   {
    n++;
   }
  }

  if (n<3)
  {
   ret = RE_ERR;
   break;
  }


  ret=RE_ERR;
  memset(nbuf,0,sizeof(nbuf));
  for (i=start,m=0,n=0;i<strlen(sourceStr);i++)
  {

   if (sourceStr[i]>='0' && sourceStr[i]<='9')
   {    

    if(n<3)
    {
     nbuf[n]=sourceStr[i];
     ret=RE_OK;
    }
    else
    {
     ret=RE_ERR;
     break;
    }
    n++;
   }
   else if (sourceStr[i]=='.')
   {
    if (strlen(nbuf)==0)
    {
     ret=RE_ERR;
     break;
    }

    sn[m] = atoi(nbuf);
    if (sn[m] <= 255)
    {
     m++;
     n=0;
     memset(nbuf,0,sizeof(nbuf));
     if (m==4)
     {
      ret=RE_OK;
      break;
     }  
    }
    else
    {
     ret=RE_ERR;
     break;

    }
   }
   else
   {
    break;
   }
  }

  if (m==3)
  {
   if (ret==RE_OK)
   {
    if (strlen(nbuf)==0)
    {
     ret=RE_ERR;
    }
    else
    {
     sn[3]=atoi(nbuf);
     if (sn[3] <= 255)
     {
      ret=RE_OK;
     }
     else
     {
      ret=RE_ERR;
     }
    }
   }
  }
  else
  {
   if (m!=4)
   {
    ret=RE_ERR;
   }   
  }

  if (ret==RE_OK)
  {
   break;
  }
  else
  {
   continue;
  }
 }

 if (ret==RE_OK)
 {
  sprintf(hostIP,"%u.%u.%u.%u",sn[0],sn[1],sn[2],sn[3]);
 }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值