c語言十六進制轉十進制函數?題目:進制轉換綜合前三,輸入一個字符串,判斷其為幾進制,并根據輸入轉換成對應的數制,今天小編就來說說關于c語言十六進制轉十進制函數?下面更多詳細答案一起來看看吧!
題目:進制轉換。綜合前三,輸入一個字符串,判斷其為幾進制,并根據輸入轉換成對應的數制。
代碼:由于主代碼文件過長,将函數放至jinzhi.h頭文件中,頭文件中代碼如下:
//輸出數組
void chu(char c[]){
int j;
for(j=0;c[j]!=’\0′;j++)
putchar(c[j]);
printf(“\n”);
}
//判斷為幾進制
int panduan(char c[]){
int s;
if(c[0]==’0′){
if(c[1]==’x’)
s=16;
else
s=8;
}
else
s=10;
return s;
}
//輸出是幾進制
void chus(int s){
switch(s){
case 8:printf(“\n這是八進制\n”);break;
case 10:printf(“\n這是十進制\n”);break;
case 16:printf(“\n這十六進制\n”);break;
}
}
//濾去八進制的非法字符
int bj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!=’\0′;j++)
if(c[j]>=’0’&&c[j]<=’7′){
a[k]=c[j];
k++;
}
a[k]=’\0′;
printf(“濾去非法字符後,八進制為:”);
for(m=0;a[m]!=’\0′;m++)
putchar(a[m]);
printf(“\n”);
printf(“\n”);
for(m=0;a[m]!=’\0′;m++)
s=s*8+a[m]-‘0’;
return s;
}
int sj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!=’\0′;j++)
if(c[j]>=’0’&&c[j]<=’9′){
a[k]=c[j];
k++;
}
a[k]=’\0′;
printf(“濾去非法字符後,十進制為:”);
for(m=0;a[m]!=’\0′;m++)
putchar(a[m]);
printf(“\n”);
printf(“\n”);
for(m=0;a[m]!=’\0′;m++)
s=s*10+a[m]-‘0’;
return s;
}
//濾去十六進制的非法字符
int lj(char c[]){
int j,k,m,s=0;
int a[80];
k=0;
for(j=0;c[j]!=’\0′;j++)
if(c[j]>=’0’&&c[j]<=’9’||c[j]>=’a’&&c[j]<=’f’||c[j]>=’A’&&c[j]<=’F’)
{
a[k]=c[j];
k++;
}
a[k]=’\0′;
printf(“濾去非法字符後,十六進制為:”);
for(m=0;a[m]!=’\0′;m++)
putchar(a[m]);
printf(“\n”);
printf(“\n”);
for(m=0;a[m]!=’\0′;m++){
if(a[m]>=’0’&&a[m]<=’9′)
s=s*16+a[m]-‘0’;
else if(a[m]>=’A’&&a[m]<=’Z’)
s=s*16+a[m]-‘A’+10;
else if(a[m]>=’a’&&a[m]<=’z’)
s=s*16+a[m]-‘a’+10;
}
return s;
}
//十進制轉為八進制
void zhuanba(int ba){
int m=0,j;
int s=ba;
int d[80];
printf(“其轉換成八進制為:0”);
while(s>0){
d[m]=s%8;
m++;
s=s/8;
}
d[m]=’\0′;
for(j=m-1;j>=0;j–)
printf(“%d”,d[j]);
printf(“\n”);
}
//十進制轉為二進制
void zhuaner(int ba){
int m=0,j;
int s=ba;
int d[80];
printf(“其轉換成二進制為:”);
while(s>0){
d[m]=s%2;
m++;
s=s/2;
}
d[m]=’\0′;
for(j=m-1;j>=0;j–)
printf(“%d”,d[j]);
printf(“\n”);
}
//十進制轉為十六進制
void zhuanshiliu(int ba){
int m=0,j;
int g=ba;
int e[80];
printf(“其轉換成十六進制為:0x”);
while(g>0){
e[m]=g%16;
m++;
g=g/16;
}
e[m]=’\0′;
for(j=m-1;j>=0;j–)
if(e[j]==10)
printf(“a”);
else if(e[j]==11)
printf(“b”);
else if(e[j]==12)
printf(“c”);
else if(e[j]==13)
printf(“d”);
else if(e[j]==14)
printf(“e”);
else if(e[j]==15)
printf(“f”);
else
printf(“%d”,e[j]);
printf(“\n”);
}
//選擇轉換成幾進制
void zhuanhuan(int ba){
int n;
while(n){
printf(“請問要轉換成幾進制?\n\t輸入 2 轉換為二進制\n\t輸入 8表示轉換為八進制\n\t輸入 10 表示轉換為十進制\n\t輸入 16 轉換為十六進制\n\t輸入 0 退出轉換\n”);
scanf(“%d”,&n);
switch(n){
case 0:printf(“退出轉換”);break;
case 10:printf(“其轉換為十進制為:%d\n”,ba);break;
case 8:zhuanba(ba);break;
case 2:zhuaner(ba);break;
case 16:zhuanshiliu(ba);break;
default:break;
}
}
}
主文件中代碼如下:
#include <stdio.h>
#include <string.h>
#include <jinzhi.h>
main(){
char c[80];
int i;
int s,shi,shiliu,ba;
printf(“請輸入要轉換的數字:”);
for(i=0;i<80;i++)
if((c[i]=getchar())==’\n’)
break;
c[i]=’\0′;//i為字符長度
printf(“您輸入的是:”);
chu(c);//輸出字符數組
s=panduan(c);//判斷進制
chus(s);//輸出是幾進制
//濾去各進制中的非法字符
switch(s){
case 8:
ba=bj(c);
zhuanhuan(ba);
break;
case 16:
shiliu=lj(c);zhuanhuan(shiliu);
break;
default:
shi=sj(c);zhuanhuan(shi);
break;
}
system(“pause”);
}
運行結果:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!