很久之前写的,今天放在这里。
1、不含字母
#include <iostream>
#include <stdio.h>
//8个二进制(2个十六进制)数转换成十进制数,不含a-f。即00-99的转换
int transfer_0(int x)
{
int y;//结果
int temp;//临时值
y=x%10;//个位数
temp=(x%100-y)/10;//十位数
y+=temp*16;
return y;
}
//32个二进制(4个十六进制)数转换成十进制数,不含a-f。即0000-9999的转换
void transfer_1(unsigned int x)
{
//从右向左
int temp1=x%100;
int y1=transfer_0(temp1);
int temp2=(x%10000-temp1)/100;
int y2=transfer_0(temp2);
int temp3=(x%1000000-temp1-temp2*100)/10000;
int y3=transfer_0(temp3);
int temp4=(x%100000000-temp1-temp2*100-temp3*10000)/1000000;
int y4=transfer_0(temp4);
printf("结果是:%d.%d.%d.%d\n",y4,y3,y2,y1);
}
void main()
{
unsigned int x;
printf("IP地址:");
scanf("%d",&x);
transfer_1(x);
system("pause");
}
2、含有字母
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
//将16进制数数转化成10进制数,一位的0-F。
int transfer_0(char x)
{
int y=0;//返回值
if (x>='0' && x<='9')//0-9的数字
{
y=x-'0';
return y;
}
if (x>='a' && x<='f')//a-f的字母
{
y=x-'a'+10;
return y;
}
if (x>='A' && x<='F')//A-F的字母
{
y=x-'A'+10;
return y;
}
printf("参数错误!");
exit(1);
}
/*
//将16进制数数转化成10进制数,两位的00-FF。
int transfer_1(char x[],int n)//长度为2
{
char s[2];//固定的,长度不变
for (int i=0;i<n;i++)
{
s[i]=x[i];
}
int y1=transfer_0(s[0]);//十位
int y2=transfer_0(s[1]);//个位
int y=y2+y1*16;
return y;
}
*/
//尝试一次,尝试删除上面的,哈哈~~
//将16进制数数转化成10进制数,八位的00000000-FFFFFFFF。
void transfer_2(char x[],int n)//长度为8
{
//从左往右
int y0=transfer_0(x[0]);
int y1=transfer_0(x[1]);
int y2=transfer_0(x[2]);
int y3=transfer_0(x[3]);
int y4=transfer_0(x[4]);
int y5=transfer_0(x[5]);
int y6=transfer_0(x[6]);
int y7=transfer_0(x[7]);
printf("结果是:%d.%d.%d.%d\n",y0*16+y1,y2*16+y3,y4*16+y5,y6*16+y7);
}
void main()
{
char x[9]="";
printf("8位的IP地址(十六进制):");//不能有空位
cin>>x;
transfer_2(x,8);
system("pause");
}
3、提交版
#include <stdio.h>
#include <string>
//将16进制数数转化成10进制数,一位的0-F。
int transfer_0(char x)
{
int y=0;//返回值
if (x>='0' && x<='9')//0-9的数字
{
y=x-'0';
return y;
}
if (x>='a' && x<='f')//a-f的字母
{
y=x-'a'+10;
return y;
}
if (x>='A' && x<='F')//A-F的字母
{
y=x-'A'+10;
return y;
}
printf("参数错误!");
exit(1);
}
//将16进制数数转化成10进制数,八位的00000000-FFFFFFFF。
void transfer_2(char x[])
{
//从左往右
int y1=transfer_0(x[0])*16+transfer_0(x[1]);
int y2=transfer_0(x[2])*16+transfer_0(x[3]);
int y3=transfer_0(x[4])*16+transfer_0(x[5]);
int y4=transfer_0(x[6])*16+transfer_0(x[7]);
printf("结果是:%d.%d.%d.%d\n",y1,y2,y3,y4);
}
void main()
{
char x[9]="";//长度为8
printf("8位的IP地址(十六进制):");//不能有空位,只取前8位
scanf("%s",&x);
transfer_2(x);
}