代码改变世界

把数字按网络顺序或主机顺序存放到字符串中++++把字符串按网络顺序转换成数字++++把字符串按主机顺序转换成数字

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);
}