-
精通C的大虾们,加进来看看...10
如何用C预言来实现,把IP地址的点表示法转换成一个无符号整数;(ex:172.17.72.1=》172被存放在高8位,1被放在低8位)(要求不能使用库函数)
感谢你们的帮助........
问题补充:<div class="quote_title">王者之剑 写道</div><div class="quote_div">#include <stdio.h> <br /> <br />unsigned int int_ip_addr(const char* pip) <br />{ <br /> unsigned int ret = 0; <br /> unsigned int byte = 0; <br /> int byte_count = 0 ; <br /> int digit_count = 0; <br /> while(*pip != '\0'){ <br /> /* 非法字符 */ <br /> if(*pip !='.' && (*pip <'0' || *pip >'9')){ <br /> return 0; <br /> } <br /> if(*pip == '.'){ <br /> byte_count++; <br /> /*'.'前没有数字或者这一小节的数字值过大或者'.'过多*/ <br /> if(digit_count == 0 || byte > 255 || byte_count>3){ <br /> return 0; <br /> } <br /> ret = (ret<<8)|byte; <br /> byte = 0; <br /> digit_count = 0; <br /> }else{ <br /> digit_count++; <br /> /*数字个数过多*/ <br /> if(digit_count>3 ){ <br /> return 0; <br /> } <br /> byte *= 10; <br /> byte += *pip-'0'; <br /> } <br /> pip++; <br /> } <br /> return (ret<<8)|byte; <br />} <br /> <br />void my_print(char* pip, unsigned int ip) <br />{ <br /> printf("str ip: %s\n", pip); <br /> printf("int ip: %u ", ip); <br /> printf("convert to str: %d.", (ip&0xff000000)>>24); <br /> printf("%d.", (ip&0x00ff0000)>>16); <br /> printf("%d.", (ip&0x0000ff00)>>8); <br /> printf("%d\n", (ip&0x000000ff)); <br />} <br />int main(void) <br />{ <br /> int i; <br /> char* pip[11] = {"172.1236.55.32",".36.55.32","172.y4.55.32", <br /> "192...","192.168.10.12", "192.168.10.0.", <br /> "255.255.255.255","192.ab1.0.0", "192.168..255", <br /> "192168016600999999","255.355.2.254"}; <br /> for(i=0;i<11;i++){ <br /> my_print(pip[i], int_ip_addr(pip[i])); <br /> } <br /> <br />} <br /></div> <br /> <br />能不能注释多一点呢....我新手吖,哈哈``` <br />解释清楚一点呐``` <br />准备给分你哦.. <br />2010年1月16日 20:16
2个答案 按时间排序 按投票排序
-
#include <stdio.h>
unsigned int int_ip_addr(const char* pip)
{
unsigned int ret = 0;
unsigned int byte = 0;
int byte_count = 0 ;
int digit_count = 0;
while(*pip != '\0'){
/* 非法字符 */
if(*pip !='.' && (*pip <'0' || *pip >'9')){
return 0;
}
if(*pip == '.'){
byte_count++;
/*'.'前没有数字或者这一小节的数字值过大或者'.'过多*/
if(digit_count == 0 || byte > 255 || byte_count>3){
return 0;
}
ret = (ret<<8)|byte;
byte = 0;
digit_count = 0;
}else{
digit_count++;
/*数字个数过多*/
if(digit_count>3 ){
return 0;
}
byte *= 10;
byte += *pip-'0';
}
pip++;
}
return (ret<<8)|byte;
}
void my_print(char* pip, unsigned int ip)
{
printf("str ip: %s\n", pip);
printf("int ip: %u ", ip);
printf("convert to str: %d.", (ip&0xff000000)>>24);
printf("%d.", (ip&0x00ff0000)>>16);
printf("%d.", (ip&0x0000ff00)>>8);
printf("%d\n", (ip&0x000000ff));
}
int main(void)
{
int i;
char* pip[11] = {"172.1236.55.32",".36.55.32","172.y4.55.32",
"192...","192.168.10.12", "192.168.10.0.",
"255.255.255.255","192.ab1.0.0", "192.168..255",
"192168016600999999","255.355.2.254"};
for(i=0;i<11;i++){
my_print(pip[i], int_ip_addr(pip[i]));
}
}2010年1月17日 18:55
-
unsigned long get_ip_addr(char *pip)
{
int i = 0,k = 0;
unsigned char c_tmp;
unsigned long l_tmp = 0;
unsigned long r_ip = 0;
while('\0' != *pip)
{
c_tmp = *pip++;
if('.' == c_tmp)
{
if(++k <= 3)
{
r_ip |= l_tmp;
r_ip <<= 8;
i = 0;
l_tmp = 0;
}
else
{
return(0); // 错误 IP
}
}
else if(++i < 4)
{
l_tmp *= 10;
l_tmp += (c_tmp - '0');
}
else
{
return(0); // 错误 IP
}
}
r_ip |= l_tmp;
return(r_ip);
}
2010年1月16日 22:22
相关推荐
JMSAP36-令狐大虾.doc
那位好心的大虾帮帮忙....破解一下,小弟感激不尽,谢谢!谢谢!谢谢!
《大虾电子网30章C51入门教程》是一份专为初学者设计的教程,旨在帮助读者快速掌握C51编程语言的基础知识和应用技巧。C51是为8051微控制器系列设计的一种高级编程语言,广泛应用于嵌入式系统开发。这份教程共分为30...
SSCOM5.04a是该软件的一个版本,它提供了一系列强大的功能,帮助工程师们进行串口通信的测试、调试和数据传输。下面将详细介绍SSCOM5.04a的关键特性及其在实际应用中的价值。 首先,SSCOM5.04a支持多种串行接口标准...
大虾们都来帮我整整Matlab的Sfunction问题急-theta.m 在下是新手,遇到问题如下,请高手帮帮我
【知识点】 在IT行业中,诚信和公正是非常重要的价值观,特别是在公务员队伍的管理中。公事员诚信档案的建立是一个关键举措,旨在提升公务员的工作责任感和公众信任度。以下是相关知识点的详细说明: ...
虽然文件的标题和描述提及的是“大虾的不同做法”,但基于你所要求的主题,我们可以从中提炼出一些与烹饪和食材处理相关的IT知识点。在美食制作过程中,数字化技术和信息技术的应用已经非常广泛,以下是一些可能的...
天鹅、大虾和梭鱼.ppt
【大虾烧白菜】是一道深受人们喜爱的家常菜肴,它将鲜美的大虾与营养丰富的白菜结合,口感层次丰富,营养均衡。下面将详细讲解如何制作这道菜,以及挑选新鲜大虾的方法和技巧。 **大虾烧白菜的做法** 1. **准备...
C51是为8051系列单片机设计的一种高级语言,它的语法接近于标准C,但加入了针对硬件特性的特定指令,使得程序编写更为简洁高效。 1. C51语言基础:C51是基于C语言的扩展,保留了C语言的基本结构,如变量定义、控制...
某个大虾给出的嵌入式编程修养,其中有许多发人深思的问题,讲的非常好。其中包含编程修养.doc,如何提高自己的编程水平.doc,(经典)C语言嵌入式系统编程修炼之屏幕操作篇(经典).doc,C语言嵌入式系统编程修炼之...
从产业设计的角度来看,我们需要更加注重智能化和交互化的设计理念,通过技术创新提升产品的智能水平,满足人们对高质量生活的追求。而在粉丝文化领域,则需要社会各方面共同努力,引导其健康发展,发挥其积极作用,...
【Unix C语言crontab、makefile资料】 在Unix操作系统中,C语言是核心的编程语言之一,而crontab和makefile则是开发者在日常工作中不可或缺的工具。这两个概念是Unix/Linux开发环境中效率和自动化的重要组成部分。 ...
【大虾炒年糕】是一道深受江浙沪地区人们喜爱的传统美食,它结合了东北菜和韩国料理的特色,简单易学,烹饪时间仅需10分钟左右,适合忙碌的上班族快速制作。以下是对这道菜品的详细解析: **所需食材与调料:** - ...
本教程“大虾电子网30章C51入门教程”是一个全面的学习资源,适合初学者和有一定基础的程序员,通过深入浅出的方式讲解C51的语法和应用。 在C51编程中,理解基本的C语言概念至关重要,包括变量、数据类型、运算符、...
一款非常好用的串口调试工具
【大虾的拼音和汉字解析】 “大虾”这个词在汉语中的拼音是“dà xiā”。其中,“大”指的是尺寸或数量上的“大”,拼音为“dà”;“虾”则是指一种生活在水中的动物,属于甲壳纲,拼音为“xiā”。在中文里,...
聂小猛,网名丁丁,国内著名的大虾电子网(http://www.daxia.com)创始人,1998年从广州中山大学物理系毕业,在广州一家从事寻呼基站业务的公司工作。99年跳到深圳华为,从事大型通信电源监控的设计工作,2000年回到...