Skip to content

79. 10진수 16진수 변환


1. 키워드

  • 10진수와 16진수


2. 10진수를 16진수로 변환하기

  • sprintf를 사용하지 않고 10진수를 16진수로 된 문자열로 변환하는 방법이다.
  • 10진수를 16진수로 변환하는 방법은 10진수를 2진수로 변환하는 방법과 큰 틀이 같다.
  • 16으로 나누었을 때 나머지를 구해서 10보다 작으면 0~9까지의 값이고 10보다 크면 A~F까지의 값이다.


001


#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, 5A, B, C, D, E, F에 일치시킨다.
  • 아래 자리부터 변환했으므로 출력할 때는 역순으로 출력한다.

References