编程将二进制IP地址转换成十进制
来源:互联网 发布:windows个性化设置 编辑:程序博客网 时间:2024/06/04 17:50
/******************************************************************* Name: IP Address* Funcion: To convert binary numbers to decimal numbers* Input: 0000 0011 1000 0000 1111 1111 1111 1111* Output: 3.128.255.255**********************************************************************/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<assert.h>using namespace std;void convert(char input[],unsigned char output[])//这里的output必须为无符号型,否则必然出错{ int count = -1,i; for( i = 0; i < 32; i++ ) { if( i % 8 == 0 ) count++; if( input[i] == '1' ) { switch( i % 8 ) { case 0: output[count] += 128; break; case 1: output[count] += 64; break; case 2: output[count] += 32; break; case 3: output[count] += 16; break; case 4: output[count] += 8; break; case 5: output[count] += 4; break; case 6: output[count] += 2; break; case 7: output[count] += 1; break; default: break; } } }}/************************************增加难度 输入和输出都有句点分割 输入输出均表示为点分形式************************************/void binaryStringToInt(char binary[],int *data){ int n=strlen(binary); for(int i=0;i<n;i++) { *data+=(binary[i]-'0')<<n-i-1; //记得要 -'0' 谨记 }}void test1(){ char i[]="11011"; int d=0; binaryStringToInt(i,&d); cout<<"d= "<<d<<endl;}int IP_convert(char input[],char output[]){ assert(NULL!=input); assert(NULL!=output); int count=0; char temp[50]={0}; //char *s=strtok(input, '.'); 谨记:strtok second parameter is "" instead of '' char *s=strtok(input, "."); if(s==NULL) { cout<<"input error"<<endl; return -1; } while(s != NULL) { //cout<<s<<endl; binaryStringToInt(s,&count); //求二进制字符串对应的整数值 //cout<<"count= "<<count<<endl; itoa(count,temp,10); //将得到的数字转化为字符串 count=0; //一定要记得count 清零 strcat(output,temp); //连接到目的字符串 strcat(output,"."); // 每一段添加一个点,但是最后会多一个点 s = strtok(NULL, "."); //继续分割元字符串 } int i=0; while(output[i]!='\0')i++; output[--i]='\0'; //消除最后多余的句点 return 0;}void test(){ char input[32]; unsigned char output[4]={0}; gets(input); convert(input,output); printf( "%d.%d.%d.%d\n", output[0], output[1], output[2], output[3] ); cout<<"---------------------------------"<<endl;}int main(){ //test1(); char i[]="00001101.00001111.00000001.00001010"; char o[10]={0}; IP_convert(i,o); puts(o); return 0;}