如何把16进制数转化为10进制,c语言编写

如题所述

16进制数转10进制数原理:

某16进制数共n位,第n位表示为Xn。转换后的10进制数表示为Y。

Y = Xn×16^0 + Xn-1×16^1 + Xn-2×16^2 + …… + X1×16^n-1。

#include <stdio.h>
#include <math.h>
#include <string.h>

/* 任意进制数转十进制数 */
/* char *value : 其他进制数 */
/* int *result : 转换后的十进制数 */
/* int radix : 待转换的进制*/
void others2Decimal (char *value, int *result, int radix) { 
int digit,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);
}
}

int main (void) {
char *value;
int radix=16,result;

printf ("请输入16进制数:");
    gets (value);
    putchar ('\n');
    puts ("================================================================\n");
    
    printf ("10进制转换结果:"); 
others2Decimal (value,&result,radix);
printf ("%d\n",result);
putchar ('\n');

getch (); /*屏幕暂留*/
return 0;
}

运行结果

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-27
可以用<stdlib.h> 中的char*_itoa(intvalue,char*string,intradix);把整型转换为其他进制的字符串参考代码:
#include<stdio.h>
#include<stdlib.h> //包含_itoa的头文件

int main()
{
int a=110;
char p[20];
_itoa(110,p,16); //16表示16进制,还可以用2、8、10
printf("%s",p);
return 0;
}
第2个回答  2017-07-27
#include <stdio.h>
#include <string.h>
#include <math.h>
int main() {
    char *Hex = "27c";
    int i, Dec = 0, t = 0;
    for (i = 0; i < strlen(Hex); i++){
        switch (Hex[i]){
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            t = (int)Hex[i] - 48;
            break;
        case 'a':
        case 'b':
        case 'c':
        case 'd':
        case 'e':
        case 'f':
            t = (int)Hex[i] - 87;
        default:
            puts("Error");
        }
        Dec += t * pow(16, strlen(Hex) - i - 1);
    }
    printf ("%d", Dec);
    return 0;
}

相似回答