반응형
안녕하세요.
오늘은 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, NULL, 16);
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
반응형
'개발공부 > C언어&C++' 카테고리의 다른 글
[C언어&C++] rand, srand 함수 ( 난수(랜덤)생성 ) (0) | 2021.02.07 |
---|---|
[C언어&C++] vector erase 활용 (0) | 2020.12.24 |
[C언어&C++] 특정 폴더 경로의 파일리스트 받아오기(파일리스트를 파일로저장) (0) | 2020.08.31 |
[C언어&C++] for문을 이용한 별찍기 (0) | 2020.03.10 |
[C언어&C++] malloc, free 함수(동적 할당 / 해제 함수) (0) | 2020.03.09 |