반응형

안녕하세요.

오늘은 16진수 문자열을 10진수로 변경하는 방법에 대해 알아보도록 하겠습니다.

일단 간단하게 strtol함수를 이용할 수 있습니다.

stdlib.h헤더 파일만 추가하고 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
void main()
{
    char chHex[] = "9B";
    unsigned int nResult = 0;
    
    nResult = strtol(chHex, NULL16);
 
    printf ( "%s => %d\n", chHex, nResult );
}
cs

 

직접 구현할 수도 있습니다.

보통 코딩문제에서도 많이 나오는 경우가 있는데, 다음과 같이 구현할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
 
void main()
{
    char chHex[] = "9b";
    unsigned int nResult = 0;
    
    for ( int i = 0; i <= strlen(chHex); i++ )
    {
        if ( chHex[i] >= 'A' && chHex[i] <= 'F' )                // chHex값이 'A'(65)~'F'(70) 일때
            nResult = nResult * 16 + chHex[i] - 'A' + 10;
        else if ( chHex[i] >= 'a' && chHex[i] <= 'f' )                // chHex값이 'a'(97)~'f'(102) 일때
            nResult = nResult * 16 + chHex[i] - 'a' + 10;
        else if ( chHex[i] >= '0' && chHex[i] <= '9' )            // chHex값이 '0'(48)~'9'(57) 일때
            nResult = nResult * 16 + chHex[i] - '0';
    }
 
    printf ( "%s => %d\n", chHex, nResult );
}
cs

코드 설명을 하자면, 자릿수에 따라 16을 곱하고 0~F(16)을 더합니다.

0~F값을 더하기 위해서는 문자열의 각각 문자에 대해 'A'~'F' 일 경우에는 'A'값을 빼고 10을 더해줘서 10~F(16) 값을 만들어주고, 'a'~'f' 일경우에는 'a'값을 빼고 10을 더해줘서 10~F(16) 값을 만들어주고, '0'~'9' 일경우에는 '0'값을 빼서 0~9 값을 만들어줍니다.

예를 들면 9b 같은 경우에는 일단 chHex[0]값이 '9'를 계산해서 nResult에 넣습니다.

nResult = 0(nResult) * 16 + 57('9') - 48('0') = 9

그리고 다음 chHex[1]값 'b'를 nResult에 더해줍니다.

nResult = 9(nResult) * 16 + 98('b') - 97('a') + 10 = 155

 

출력값은 다음과 같습니다.

9b => 155

반응형

+ Recent posts