c语言中16进制转换为十进制

方法1:使用进制转换
转载:https://zhidao.baidu.com/question/51006929.html
#include <stdio.h>
#include <string.h>
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source);
 
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch);
 
int main()
{
    char *hex = "75BCD15";
 
    printf("16进制数:	%s
", hex);
    printf("10进制数:	%ld
", hexToDec(hex));
 
    return 0;
}
 
/* 十六进制数转换为十进制数 */
long hexToDec(char *source)
{
    long sum = 0;
    long t = 1;
    int i, len;
 
    len = strlen(source);
    for(i=len-1; i>=0; i--)
    {
        sum += t * getIndexOfSigns(*(source + i));
        t *= 16;
    }  
 
    return sum;
}
 
/* 返回ch字符在sign数组中的序号 */
int getIndexOfSigns(char ch)
{
    if(ch >= 0 && ch <= 9)
    {
        return ch - 0;
    }
    if(ch >= A && ch <=F) 
    {
        return ch - A + 10;
    }
    if(ch >= a && ch <= f)
    {
        return ch - a + 10;
    }
    return -1;
}
方法2:可以使用sscanf函数将以字符串形式的十六进制数转换为整型的十六进制
sscanf函数的用法与printf函数很像,都是以格式化的形式进行操作,例如如下的例子中,sscanf("A23CD", "%x", &a);
"%x"是将字符串A23CD以十六进制形式输入a中,如果将"%x"换成为"%d"的话,就是将字符串A23CD以十进制形式输入a中,这显然是错误的,因为将A23CD转换为十进制的时候,无法解析A,CD等字符,所以得出的结果就是错误的。
int a;
sscanf("A23CD", "%x", &a);
printf("%x
",a);
printf("%d
",a);
linux@ubuntu:~/test$ ./a.out 
a23cd
664525
经验分享 程序员 微信小程序 职场和发展