十六进制转换成十进制c语言
㈠ c语言中16进制转换为十进制
最简单的使用scanf()函数和printf()函数进行格式转换,以16进制格式输入,再以10进制格式输出。
程序代码如下:
#include<stdio.h>
int main()
{
int a=0;
int i=0;
scanf("%x",&a);
printf("%d",a);
return 0;
}
运行结果:
(1)十六进制转换成十进制c语言扩展阅读:
scanf函数与printf函数的用法很像,都是以格式化的形式进行操作,例如上述程序中scanf("%x", &a);就是将输入数据以十六进制格式存储到变量a中。
"%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析A,CD等字符,所以得出的结果就是错误的。
㈡ C语言如何实现十六进制转换成十进制
C语言实现十六进制转换成十进制如下:
例如将十六进制数字 9FA8C 转换成十进制:
9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十进制)。
从右往左看,第1位的位权为 160=1,第2位的位权为 161=16,第3位的位权为 162=256,第4位的位权为 163=4096,第5位的位权为 164=65536 …… 第n位的位权就为 16n-1。
将各个位的数字乘以位权,然后再相加,就得到了十进制形式。
十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方。
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
再例如:十六进制:EA7 = 14×162 + 10×161 + 7×160 = 3751(十进制)。
(2)十六进制转换成十进制c语言扩展阅读:
C语言10进制转16进制
把十进制的数不停除以16的余数按从右到左的顺序排起来就是16进制,例如:55/16=0余5例如100 100/16=6余4 6/16余6,所以就是64,再例如1000 1000/16=62余8 62/16=3余12 3/16余3所以结果是3C8 //。
对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。
㈢ c语言中十六进制怎么转换成十进制
#include<stdio.h>
#include<math.h>
#include<string.h>
/*任意进制数转十进制数*/
/*char*value:其他进制数,以字符串形式存储*/
/*int*result:转换后的十进制数*/
/*intradix:待转换的进制*/
/*R进制数共n位,第n位表示为Xn。转换后的10进制数表示为Y*/
/*Y=Xn*R^0+Xn-1*R^1+Xn-2*R^2+……+X1*R^n-1*/
voidothers2Decimal(char*value,int*result,intradix){
intdigit,i,j;
*result=0;
for(i=strlen(value)-1,j=0;i>=0;i--,j++){
if(value[i]>='0'&&value[i]<='9')
digit=value[i]-'0';
if(value[i]>='a'&&value[i]<='z')/*十以上进制处理,小写字母*/
digit=value[i]-'a'+10;
if(value[i]>='A'&&value[i]<='Z')/*十以上进制处理,大写字母*/
digit=value[i]-'A'+10;
*result+=digit*pow(radix,j);
}
}
intmain(void){
char*value="ff";
intradix=16,result;
printf("16进制数:%s 10进制转换结果:",value);
others2Decimal(value,&result,radix);
printf("%d ",result);
putchar(' ');
getch();/*屏幕暂留*/
return0;
}
运行结果
㈣ c语言16进制转换为10进制数的函数是什么
1、可以根据16进制转10进制的算法(即各位位码值乘以位权之和)来实现该功能。
2、具体实现方法可以参考如下程序:
#include<stdio.h>
voidmain()
{
inthe;
intre=0;//保存转换为10进制的结果
intk=16;//16进制
intn=1;//位权
scanf("%d",&he);//接收用户输入的16进制数,不含0x前缀
while(he!=0)
{
re+=(he%10)*n;//取出各位位码值,并乘以对应的位权值
he/=10;//去掉16进制数的最低位,次低位变为最低位
n*=k;//位权乘以16
}
printf("%d",re);//输出转换后的结果
}
㈤ c语言16进制与10进制的转换
这个函数的int HtoD(char *a);就是将16进制的数用字符数组保存,把数组首地址作为参数传递给函数,函数返回转换后的10进制整型数值。
详细说明,我写在备注里了,你看以参考。
#include<stdio.h>
#include<string.h>
intHtoD(char*a)//将16进制的数字用字符串保存,并将字符串首地址作为参数传递
{
intnum=0,i;
for(i=0;i<strlen(a);i++)//迭代迭代次数为a数组的长度形参a是指针,初值是指向字符数组的首地址,也就是指向16进制数字的左边第1位
{
//每次迭代取指针指向的地址值进行判断,同时指针不断往右移动
if(*(a+i)>='0'&&*(a+i)<='9')//如果当前位是0~9的数字,那么总数值num累加同时前值*16(因为左边是高位,从高位往低位数,每多1位高位就*16)
num=num*16+*(a+i)-'0';
elseif(*(a+i)>='A'&&*(a+i)<='Z')//如果当前位是大写字母A~Z,转换成10进制数值,再累加
num=num*16+*(a+i)-'A'+10;
elseif(*(a+i)>='a'&&*(a+i)<='z')//如果当前位是小写字母a~z,转换成10进制数值,再累加
num=num*16+*(a+i)-'a'+10;
else
return-1;//表示输入错误的数
}
returnnum;
}
intmain()
{
chara[]="1F";
printf("1F=%d",HtoD(a));//这里我写了简单的调用,打印结果:1F=31
return0;
}