16進制轉換成c語言
① 十六進制轉十進制,C語言
#include<stdio.h>
#include <stdlib.h> //system 包含
#include<math.h>
double transition(char*); //聲明還是提到函數外
int main(){
char str[10];
double a;
printf("Enter the hexadecimal number: ");
gets(str);
a=transition(str);
printf("%.0lf\n",a); //輸出double要用%lf
system("pause");
return 0; //main返回
}
double transition(char str[]){
int i=0,n,x;
double sum=0;
int trans_char_dig(char);
while(str[i]!=0){
i++;
}
n=i;
while(i>0){
x=trans_char_dig(str[n-i]);
sum=x*pow(16,i-1)+sum;
i--;
}
return sum;
}
int trans_char_dig(char c){
if(c>=48&&c<=57){
return c-48;
}
else if(c>=65&&c<=70){
return c-55;
}
else if(c>=97&&c<=102){
return c-87;
}
else{
printf("error!");
exit(0);
}
}
② C語言中16進制的表示方法
16進制以0x開頭,後面跟數字0~9或字母A~F(小寫也可以),如:0x2D(16進制數2D)
③ 十六進制數轉換成十進制數C語言
程序代碼:#include <stdio.h>
#include <stdlib.h>
#include <math.h>/*求字元串長度函數*/
int strlengh(char *s)
{
int i;
for(i=0;s[i]!='\0';i++);
return i;
}/*16進制轉10進制函數*/
double tran(char *s)
{
int len=strlengh(s);/*求輸入的字元串的長度*/
int ss[100] ;/*用於存放對字元的轉換如f:15*/
int i;
double n=0.0;
/*對字元進行處理,將其每一位轉換為整數,之後運算進行處理*/
for(i=0;i<len;i++)
{
if(s[i]=='F'||s[i]=='f')ss[i]=15;
else if(s[i]=='E'||s[i]=='e')ss[i]=14;
else if(s[i]=='D'||s[i]=='d')ss[i]=13;
else if(s[i]=='C'||s[i]=='c')ss[i]=12;
else if(s[i]=='B'||s[i]=='b')ss[i]=11;
else if(s[i]=='A'||s[i]=='a')ss[i]=10;
else ss[i]=(int)s[i];
}
/*對轉換得到的整數進行轉換處理*/
for(i=0;i<len;i++)
{
n+=ss[i]*pow(16,len-1-i);
}
return n;/*結果返回*/
}void main()
{
/*接收16進制數*/
char Hex[100];
printf("Please input Hex:\n");
gets(Hex);
/*轉換*/
int Dec=(int)tran(Hex);
printf("Output Result:%d\n",Dec);}執行結果: