c语言二进制转换为八进制十六进制,C语言实现进制转换---二进制、八进制、十进制、十六进制。可直接运行...

#include

#include

//将十六进制数转换为十进制数

int Translate16To10(char s[])

{

int p = 0,i;

int n = 1;

int ans=0;

for ( i = strlen(s) - 1; i >= 0; i--)

{

if (s[i] >= 'A'&&s[i] <= 'F')

p = s[i] - 'A' + 10;

else

p = s[i] - '0';

ans += p * n;

n *= 16;

}

return ans;

}

//将十进制数转化为十六进制数

int Translate10To16(int n,char s[])

{

int i=0;

int p;

do

{

p=n%16;

n/=16;

if(p<=9)

{

s[i++]='0'+p;

}

else

s[i++]='A'+(p-10);

}while(n!=0);

return i;

}

//将十进制数转换为S进制数

int Translate10ToX(int n,int a[],int jz)

{

int i = 0;

do

{

a[i++] = n % jz;

n /= jz;

} while (n != 0);

return i;

}

//将X进制数转换为十进制

int TranslateXto10(int n,int X)

{

int mi=1;

int sum=0,p=0;

while(n!=0)

{

p=n%10;

n/=10;

sum+=p*mi;

mi*=X;

}

return sum;

}

//十六进制转换其他进制

void SixteenToOthers(int jz)

{

char str[20];

int ans[100];

int i;

scanf("%s", str);

int temp = Translate16To10(str);

int len=Translate10ToX(temp, ans,jz);

printf("转换结果为:\n");

for ( i = len - 1; i >= 0; i--)

printf("%d", ans[i]);

}

//其他进制转换到十六进制

void OthersToSixteen(int jz)

{

int n,i;

char ans[20];

scanf("%d",&n);

int temp=TranslateXto10(n,jz);

int count=Translate10To16(temp,ans);

printf("转换结果为:\n");

for(i=count-1;i>=0;i--)

{

printf("%c",ans[i]);

}

}

//除了关于十六进制的普通转换

void FormalTrans(int jza,int jzb)

{

int n,i;

int a[20];

scanf("%d",&n);

int temp10jz=TranslateXto10(n,jza);

int count = Translate10ToX(temp10jz,a,jzb);

for(i=count-1;i>=0;i--)

{

printf("%d",a[i]);

}

}

int main()

{

int jza, jzb;

while(1)

{

printf("你想完成从几进制到几进制的转换?(例如十进制到八进制输入:10 8,支持二进制、八进制、十进制、十六进制之间的转换)\n");

scanf("%d %d", &jza, &jzb);

printf("请输入你想想转换的%d进制数:",jza);

if (jza == 16)

{

SixteenToOthers(jzb);

}

if(jzb==16)

{

OthersToSixteen(jza);

}

else

FormalTrans(jza,jzb);

}

return 0;

}

你可能感兴趣的:(c语言二进制转换为八进制十六进制,C语言实现进制转换---二进制、八进制、十进制、十六进制。可直接运行...)