算法练习Ip地址与整数的互相转换ipstrToint
来源:互联网 发布:linux arm环境 编辑:程序博客网 时间:2024/05/18 02:44
int ipstr2int(const char *ip, unsigned int *ipvalue){if (ip == NULL || ipvalue==NULL)return -1;unsigned intresult = 0;inttmp = 0;intshift = 24;const char *pEnd = ip;const char *pStart = ip;while(*pEnd != '\0'){//到地址符里的’.’while(*pEnd != '.' && *pEnd != '\0')pEnd++;tmp = 0;//计算每个’.’之间的数值while(pStart < pEnd){tmp = tmp * 10 + (*pStart - '0');pStart++;}if(tmp<0 || tmp >255){return -1;}//将计算好的数值分别左移24位,16位,8位,0位result += (tmp << shift);shift -= 8;if (*pEnd == '\0')break;pStart = pEnd + 1;pEnd++;}*ipvalue = result;return 1;}
int ip2str(unsigned int ip, char *buf, size_t len){if(buf == NULL || len<16){return -1;}size_t length = sizeof(ip);//32位ip地址的字节数unsigned char *p = (unsigned char *)&ip+sizeof(ip)-1;//指 向ip地址最高字节char *p1 = buf;while(length){unsigned char tmp = *p;char *pstart= p1;do{*p1++ = tmp%10 +'0';tmp /= 10;}while(tmp);//逆置char *pend = p1-1;for(;pstart<pend;pstart++,pend--){char ch = *pstart;*pstart = *pend;*pend=ch;}if(length>1)*p1++ = '.';length--;//循环条件转换p--;}*p1 ='\0';return 1;}
下面是我的答案:Ip转换到整数
int Ip_to_Int(char *Ipstr){if(NULL == Ipstr || '\0' == *Ipstr)return 0;char *pEntry = 0;char *pEnd = 0;int temp = 0;//用于记录转换后数字int Resule = 0;int count = 0;//用于记录.的个数 根据这个来移位int len = 0;//用于记录两个指针间的差pEntry = pEnd = Ipstr;if(*pEntry >'9' || *pEntry < '0')//如果第一个字符不是数字就返回了return 0;for (int i = 0; *pEnd != '\0'; i++){if(*pEntry >'9' || *pEntry <'0')//不是这个范围就说明不是数字return 0;if(*pEnd == '.'){len = pEnd - pEntry;for (int k = 0; k <len; k++){temp = temp * 10 + (*pEntry - '0');pEntry ++;}if(temp >255)//大于255说明不是IPreturn 0;Resule |= temp<<(count*8);count ++;//printf("Resule :0x%p\n",Resule);temp = 0;pEnd ++;//pEnd指向. 应该指向下一个有效数字pEntry = pEnd;}pEnd ++;}//最后一个不能用.为标志了temp = 0;len = pEnd - pEntry;for (int j = 0; j < len; j++){temp = temp * 10 + (*pEntry - '0');pEntry ++;}Resule |= temp<<24;return Resule;//192.168.1.1 0x0101a8c0}
至于整数到IP 我直接使用了sprintf 作弊了 哈哈
char* Int_to_IP(unsigned int Ip,char* buff){sprintf(buff,"%u.%u.%u.%u",(unsigned char)(*(char*)&Ip),(unsigned char)(*(char*)((char*)&Ip + 1)),(unsigned char)(*(char*)((char*)&Ip + 2)),(unsigned char)(*(char*)((char*)&Ip + 3)));return buff;}
0 0
- 算法练习Ip地址与整数的互相转换ipstrToint
- ip地址与整数互相转换
- java版ip地址与整数的互相转换
- 算法:整数与ip地址转换
- Java算法---整数与IP地址间的转换
- IP地址字符串与整数的互相转化
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数之间的转换
- IP地址与整数的相互转换
- 整数与IP地址间的转换
- ip地址与整数之间的转换
- 整数与IP地址间的转换
- ip地址与整数之间的转换
- 整数与ip地址之间的转换
- 整数与IP地址间的转换
- 整数与IP地址间的转换
- .Net IL 指令速查
- 协程 [wiki]
- 纯css实现二级菜单栏
- 堆排序:动态数组求中位数
- 机器人走方格
- 算法练习Ip地址与整数的互相转换ipstrToint
- Tomcat的一些疑惑与Java Web应用服务器的总结
- 华为 字符集合
- 利用 padding+background & border 为图片设置双边框
- CString字符串分割
- Semaphore and Mutex usages and differences
- ORA-00257: archiver error. Connect internal only, until freed
- 测试参考资料
- Spark 编程基础