79. 10진수 16진수 변환
1. 키워드
2. 10진수를 16진수로 변환하기
sprintf
를 사용하지 않고 10진수를 16진수로 된 문자열로 변환하는 방법이다.
- 10진수를 16진수로 변환하는 방법은 10진수를 2진수로 변환하는 방법과 큰 틀이 같다.
16
으로 나누었을 때 나머지를 구해서 10
보다 작으면 0
~9
까지의 값이고 10
보다 크면 A
~F
까지의 값이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
int decimal = 300; // 10진수 300
char hexadecimal[20] = {
0,
}; // 16진수로 된 문자열을 저장할 배열
int position = 0;
while (1)
{
int mod = decimal % 16; // 16으로 나누었을 때 나머지를 구함
if (mod < 10) // 나머지가 10보다 작으면
{
// 숫자 0의 ASCII 코드 값 48 + 나머지
hexadecimal[position] = 48 + mod;
}
else // 나머지가 10보다 크거나 같으면
{
// 나머지에서 10을 뺀 값과 영문 대문자 A의 ASCII 코드 값 65를 더함
hexadecimal[position] = 65 + (mod - 10);
}
decimal = decimal / 16; // 16으로 나눈 몫을 저장
position++; // 자릿수 변경
if (decimal == 0) // 몫이 0이되면 반복을 끝냄
break;
}
// 배열의 요소를 역순으로 출력
for (int i = position - 1; i >= 0; i--)
{
printf("%c", hexadecimal[i]);
}
printf("\n");
return 0;
}
// 12C
- 10진수를
16
으로 나누었을 때 나머지를 구해서 10
보다 작으면 배열에 0
~9
까지의 문자를 넣어주고, 10
보다 크거나 같으면 배열에 A
~F
까지의 문자를 넣어주면 된다.
- 즉,
0
~9
는 숫자 0
의 ASCII 코드 값 48
을 더해주고, A
~F
는 영문 대문자 A
의 ASCII 코드 값 65
를 더해주면 된다.
- 이때 소문자로 출력하고 싶다면
97
을 더한다.
- 단,
10
보다 크거나 같을 때는 10
을 빼서 0
, 1
, 2
, 3
, 4
, 5
를 A
, B
, C
, D
, E
, F
에 일치시킨다.
- 아래 자리부터 변환했으므로 출력할 때는 역순으로 출력한다.
References