HOWTO · C
C에서 16진수 값 인쇄
이 기사에서는 C 프로그래밍 언어로 16진수 값을 인쇄하는 방법을 보여줍니다.
이 페이지의 내용
C에서 정수를 16진수로 출력하려면 %x는 소문자 숫자를, %X는 대문자 숫자를 출력하도록 printf에 전달하세요. 예를 들어 printf("%x", 252);는 fc를 표시합니다.
C에서 정수를 16진수로 출력하기
16진수는 정수를 밑이 16인 방식으로 나타낸 것입니다. 숫자 0–9와 문자 a–f(또는 A–F)를 사용합니다. 이는 값을 표시하는 방식이지, 별도의 C 자료형은 아닙니다. 적절한 정수형에 숫자를 저장한 다음 printf 변환 지정자가 표시 형식을 선택하게 하세요. 인수의 자료형은 변환 지정자와 일치해야 합니다. 일반적인 정수 승격 후 %x와 %X는 unsigned int 인수를 기대합니다.
scanf는 별도의 입력 연산입니다. 16진수 입력을 읽을 수 있지만, 이미 출력할 값이 있다면 사용할 필요가 없습니다.
소문자 또는 대문자 16진수 출력 선택하기
알파벳 문자를 소문자로 출력하려면 %x를 사용하세요. 예를 들어 fc와 같이 표시됩니다. 대문자로 출력하려면 %X를 사용하세요. 예를 들면 FC입니다. 두 변환은 같은 정수를 나타내며 문자 대소문자만 다릅니다. 형식 문자열에서 숫자를 표시할 위치에 변환 지정자를 넣고, 이에 맞는 정수 인수를 printf에 전달하세요.
접두사, 필드 너비 또는 앞쪽 0 지정하기
# 플래그는 대체 형식을 요청합니다. 0이 아닌 16진수 값에서는 %x와 함께 0x, %X와 함께 0X를 붙입니다. 값이 0이면 접두사를 붙이지 않습니다. 필드 너비는 접두사를 포함한 전체 출력의 최소 너비입니다. 예를 들어 %10x는 최소 10자 너비의 필드에서 숫자를 오른쪽 정렬합니다. 정밀도를 지정하지 않은 경우 %010x처럼 0 플래그를 추가하면 왼쪽을 0으로 채웁니다.
정수 정밀도는 16진수 숫자의 최소 개수를 지정합니다. 예를 들어 %.8x는 앞쪽에 0을 채워 최소 8자리로 출력합니다. 정밀도를 지정하면 0 플래그는 무시됩니다. #와 너비 또는 정밀도를 함께 사용하면 접두사와 숫자 표시를 조정할 수 있습니다. 예를 들어 %#10.8x는 대체 형식을 사용하고 최소 8자리의 숫자를 최소 너비 10자 안에 표시하도록 요청합니다.
10진 정수를 16진수로 변환하기
252를 손으로 변환하려면 16으로 나누고 나머지를 기록합니다. 252를 16으로 나누면 몫은 15, 나머지는 12입니다. 15를 16으로 나누면 몫은 0, 나머지는 15입니다. 나머지를 역순으로 읽습니다. 나머지 15는 f, 나머지 12는 c에 해당하므로 252는 16진수로 fc입니다. printf는 알맞은 정수 인수에 대해 이 변환을 수행합니다. 따라서 손으로 나누는 과정은 결과를 이해하는 데 도움이 되지만 프로그램에서 꼭 필요한 단계는 아닙니다.
전체 예제 컴파일 및 실행하기
이 완전한 C 프로그램은 같은 값을 두 가지 문자 대소문자로 출력한 뒤, 너비, 0 채우기, 대체 형식, 정밀도를 보여 줍니다. 이 예제는 여기서 실행하지 않았으므로 관찰된 출력은 포함하지 않습니다. 사용 중인 시스템에서 형식 지정 결과를 확인하려면 C 컴파일러로 컴파일하세요.
#include <stdio.h>
int main(void) {
unsigned int value = 252;
printf("lowercase: %x\n", value);
printf("uppercase: %X\n", value);
printf("width: [%10x]\n", value);
printf("zeroes: [%010x]\n", value);
printf("prefix: [%#x]\n", value);
printf("precision: [%.8x]\n", value);
printf("zero with alternate form: [%#x]\n", 0u);
return 0;
}