計(jì)算機(jī)內(nèi)部按2進(jìn)制存放數(shù)據(jù),輸入輸出才涉及 10進(jìn)制,16進(jìn)制等等。
成都創(chuàng)新互聯(lián)公司致力于網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過(guò)標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場(chǎng)競(jìng)爭(zhēng)中脫穎而出。 選擇成都創(chuàng)新互聯(lián)公司,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
所以,你按10進(jìn)制輸入,按16進(jìn)制輸出就達(dá)到你的目的了。
例如:
int x;
printf("input x\n");
scanf("%d",x); // %d 就是按10進(jìn)制輸入
printf("The hex is %x\n", x); // %x 就是按16進(jìn)制輸入
// c/c++ 有 itoa 函數(shù),可以把整型轉(zhuǎn)各種進(jìn)制,存放于字符數(shù)組s里,
// 例如 2進(jìn)制: itoa(x,s,2); 8進(jìn)制: itoa(x,s,8); 16 進(jìn)制: itoa(x,s,16);
C語(yǔ)言16進(jìn)制轉(zhuǎn)十進(jìn)制具體函數(shù)如下:
#include
"stdio.h"
int
main()
{
int
num=0;
int
a[100];
int
i=0;
int
m=0;
int
yushu;
char
hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
printf("請(qǐng)輸入一個(gè)十進(jìn)制整數(shù):");
scanf("%d",num);
while(num0)
{
yushu=num%16;
a[i++]=yushu;
num=num/16;
}
printf("轉(zhuǎn)化為十六進(jìn)制的數(shù)為:0x");
for(i=i-1;i=0;i--)//倒序輸出
{
m=a[i];
printf("%c",hex[m]);
}
printf("\n");
}
C語(yǔ)言是一門通用計(jì)算機(jī)編程語(yǔ)言,應(yīng)用廣泛。C語(yǔ)言的設(shè)計(jì)目標(biāo)是提供一種能以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語(yǔ)言。
這個(gè)函數(shù)的int HtoD(char *a);就是將16進(jìn)制的數(shù)用字符數(shù)組保存,把數(shù)組首地址作為參數(shù)傳遞給函數(shù),函數(shù)返回轉(zhuǎn)換后的10進(jìn)制整型數(shù)值。
詳細(xì)說(shuō)明,我寫在備注里了,你看以參考。
#include?stdio.h
#include?string.h
int?HtoD(char?*a)//將16進(jìn)制的數(shù)字用字符串保存,并將字符串首地址作為參數(shù)傳遞
{
int?num=0,i;
for(i=0;?istrlen(a);?i++)//迭代?迭代次數(shù)為a數(shù)組的長(zhǎng)度????形參a是指針,初值是指向字符數(shù)組的首地址,也就是指向16進(jìn)制數(shù)字的左邊第1位
{
//每次迭代?取指針指向的地址值進(jìn)行判斷,同時(shí)指針不斷往右移動(dòng)
if(*(a+i)='0'*(a+i)='9')//如果當(dāng)前位是0~9的數(shù)字,那么總數(shù)值num累加同時(shí)前值*16(因?yàn)樽筮吺歉呶?,從高位往低位?shù),每多1位高位就*16)
num?=?num*16?+?*(a+i)-'0';
else?if(*(a+i)='A'*(a+i)='Z')//如果當(dāng)前位是大寫字母A~Z,轉(zhuǎn)換成10進(jìn)制數(shù)值,再累加
num?=?num*16?+?*(a+i)-'A'+10;
else?if(*(a+i)='a'*(a+i)='z')//如果當(dāng)前位是小寫字母a~z,轉(zhuǎn)換成10進(jìn)制數(shù)值,再累加
num?=?num*16?+?*(a+i)-'a'+10;
else
return?-1;//表示輸入錯(cuò)誤的數(shù)
}
return?num;
}
int?main()
{
char?a[]="1F";
printf("1F=%d",HtoD(a));??//這里我寫了簡(jiǎn)單的調(diào)用,打印結(jié)果:1F=31
return?0;
}
方案一:
#includestdio.h#includemath.h#includestring.hint main(){char s[50];scanf("%s",s);int t=strlen(s);long sum=0;for(int i=0;it;i++){if(s[i]='A' s[i]='Z')s[i]=int(s[i]-'A')+10+'0';sum+=((s[i]-'0')*(pow(16,t-1-i)));}printf("%ld\n",sum);}
方案二:
#includestdio.hint main(){char s[50];scanf("%s",s);int t;long sum=0;for(int i=0;s[i];i++){if(s[i]='9')t=s[i]-'0';elset=s[i]-'A'+10;sum=sum*16+t;}printf("%ld\n",sum);return 0;}