/*
 16진수를 10진수로 변경
*/

#include <stdio.h>

 

#define MAX 10 // 입력받을 최대 자리수

 

int convert(char); // 입력된 문자를 숫자로 변경한다.
int multi(int m); // m만큼 16의 승을 구한다.
int STATE = 1; // 잘못된 입력을 받으면 0으로 변경된다.

 

main()
{
 char ch, array[MAX];
 int x = 0;
 int count =0;
 int sum=0; // 총 값
 
 printf("Input a HEX : ");
 while((ch = getchar()) != '\n' && x <= MAX) //입력된 값을 배열에 입력
 {
    array[x++] = ch;
 }

 count = x;

 

 for(int i=0; i < x ; i++)
     sum += convert(array[i]) * multi(--count);

 

 if(STATE) { // 정상일 경우만 출력
     printf("convert HEX into DEC : %d\n", sum);
 }

 

 return 0;


}

 

int convert(char c)
{
 if('a' <= c && c <= 'f') //소문자이면 대문자로 변환
    c = c - 32;
 
 if('A' <= c && c <= 'F') //대문자이면 16진수에 해당되는 값으로 변환
    return c - 'A' + 10;
 
 else if('0' <= c && c <= '9') //숫자문자이면 문자를 숫자로 변환
    return c - '0';
 
 else {
    printf("You input a wrong number\n");
    STATE = 0; // 잘못된 값을 입력 받았으므로 STATE 값을 0으로 변경
 }

}

 

int multi(int m)
{
 if(m == 0)
    return 1;

 if(m >= 1)
    return 16 * multi(m-1);
}


+ Recent posts