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进制数:\t%s\n", hex);
    printf("10进制数:\t%ld\n", 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));    //从低位开始,getIndexOfSigns函数返回其中一位字符对应的十进制数
        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\n",a);

printf("%d\n",a);
结果:


linux@ubuntu:~/test$ ./a.out 

a23cd

664525
 

猜你喜欢

转载自blog.csdn.net/ninioq/article/details/83542282