把数字按网络顺序或主机顺序存放到字符串中++++把字符串按网络顺序转换成数字++++把字符串按主机顺序转换成数字
2013-07-25 10:37 夏洛克·福尔摩斯 阅读(325) 评论(0) 编辑 收藏 举报/****把数字按网络顺序放到字符串中****/
int nNumToNet(int num,char *buf,int len){ int ret_int; short ret_short; if(sizeof(int)!=4 || sizeof(short)!=2){ printf("本程序不能在低于32位的机器上运行!\n"); exit(1); } if(len==2){ ret_short=(short)num; ret_short=htons(ret_short); memcpy(buf,(char *)&ret_short,len); }else if(len==4){ ret_int=(int)num; ret_int=htonl(ret_int); memcpy(buf,(char *)&ret_int,len); }else{ printf("转换网络顺序时长度[%d]只能是2或者4!\n",len); return(-1); } return(0); }
/****把数字按主机顺序放到字符串中****/
int nNumToHost(int num,char *buf,int len){ int ret_int; short ret_short; if(sizeof(int)!=4 || sizeof(short)!=2){ printf("本程序不能在低于32位的机器上运行!\n"); exit(1); } if(len==2){ ret_short=(short)num; memcpy(buf,(char *)&ret_short,len); }else if(len==4){ ret_int=(int)num; memcpy(buf,(char *)&ret_int,len); }else{ printf("转换网络顺序时长度[%d]只能是2或者4!\n",len); return(-1); } return(0); }
/****把字符串按网络顺序转换成数字****/
int nNetToNum(char *buf,int len){ int ret_int; short ret_short; if(sizeof(int)!=4 || sizeof(short)!=2){ printf("本程序不能在低于32位的机器上运行!\n"); exit(1); } if(len==2){ memcpy((char *)&ret_short,buf,len); ret_short=ntohs(ret_short); return((int)ret_short); }else if(len==4){ memcpy((char *)&ret_int,buf,len); ret_int=ntohl(ret_int); return((int)ret_int); }else{ printf("转换网络顺序时长度[%d]只能是2或者4!\n",len); return(-1); } return(0); }
/****把字符串按主机顺序转换成数字****/
int nHostToNum(char *buf,int len){ int ret_int; short ret_short; if(sizeof(int)!=4 || sizeof(short)!=2){ printf("本程序不能在低于32位的机器上运行!\n"); exit(1); } if(len==2){ memcpy((char *)&ret_short,buf,len); return((int)ret_short); }else if(len==4){ memcpy((char *)&ret_int,buf,len); return((int)ret_int); }else{ printf("转换网络顺序时长度[%d]只能是2或者4!\n",len); return(-1); } return(0); }
技术成就现在,眼光着看未来。