函数写法
2进制(字符串)转十进制
int bd(char*s)
{
int i,x=0;
for(i=0;s[i];i++)
x=x*2+s[i]-'0';
return x;
}
8进制(字符串)转十进制
int ed(char*p)
{ int i=0,n=0;
while(p[i]!='\0')
{
n=n*8+p[i]-'0';
i++;
}
return n;
}
十六进制(字符串)转十进制
int sd(char*l)
{
int i=0,x=0;
while(l[i]!='\0')
{ if(l[i]>='0'&&l[i]<='9')
x=x*16+l[i]-'0';
if(l[i]>='A'&&l[i]<='F')
x=x*16+(l[i]-'A'+10);
i++;
}
return x;
}
//十六进制中可能有字母,所以要分开来算;
十进制(数)转十六进制 (字符)
int sd(char*s,int a)
{
int i=0,j,k;
while(a!=0)
{
if(a%16>6)
{ s[i++]=a%16+'0';
a=a/16;
}
else
{
s[i++]=a%16+'A'-10;
a=a/16;}
i++
} s[i]='\0';
j=strlen(s)-1;//#include<string.h>
for(i=0;i<j;i++,j--)
{
k=s[i];
s[i]=s[j];
s[j]=k;
}
return s;
}
//A=10,B=11,C=12,D=13,E=14,F=15;
十进制转2进制(字符)
int bd(char*s,int a)
{
int i=0,j,k;
while(a!=0)
{
s[i++]=a%2+'0';
a=a/2;
}
s[i]='\0';
j=strlen(s)-1;
for(i=0;i<j;i++,j--)
{
k=s[i];
s[i]=s[j];
s[j]=k;
}
return s;
}
十进制转8进制(字符)
int ed(char*s,int a)
{ int i=0,j,k;
while(a!=0)
{ s[i++]=a%8+'0';
a=a/8;
}
s[i]='\0';
j=strlen(s)-1;
for(i=0;i<j;i++,j--)
{
k=s[i];
s[i]=s[j];
s[j]=k;
}
return s;
}
十进制转10进制(字符)
int td(char*s,int a)
{
int i=0,j,k;
while(a!=0)
{
s[i++]=a%10+'0';
a=a/10;
} s[i]='\0';
j=strlen(s)-1;
for(i=0;i<j;i++,j--)
{
k=s[i];
s[i]=s[j];
s[j]=k;
}
return s;
}
直接输出
printf("%o",a);//8进制
printf("%x",a);//16进制
负的另算,等会了再补,如果有想补充可以留言。