16진수란
16진수(헥스, hexadecimal)는 16을 밑으로 하는 수 체계입니다. 0부터 9까지의 숫자와 A부터 F까지의 글자를 쓰며, A는 10, F는 15를 뜻합니다. 16진수 두 자리로 0부터 255까지, 즉 정확히 1바이트를 나타낼 수 있습니다. 그래서 원시 데이터를 짧고 읽기 쉽게 보여 주는 데 16진수를 쓰고, 16진수 텍스트 변환은 그 바이트가 무슨 글자인지 확인하는 가장 빠른 방법입니다.
16진수는 메모리 덤프, 네트워크 패킷 캡처, 파일 시그니처, 색상 코드, 소스 코드의 이스케이프 시퀀스, 오류 로그에서 볼 수 있습니다. 이런 바이트를 텍스트로 되돌리면 데이터가 무슨 내용인지 알 수 있는 경우가 많습니다.
16진수 텍스트 변환기 사용 방법
16진수를 텍스트로. 왼쪽 16진수 입력란에 헥스 값을 붙여넣습니다. 오른쪽 텍스트 입력란에 디코딩된 텍스트가 나타납니다. 흔히 쓰는 구분 기호는 무시하므로 다음 형식을 그대로 붙여넣어도 됩니다.
- 공백으로 나눈 바이트:
48 65 6c 6c 6f - 이어 붙인 긴 문자열:
48656c6c6f - C 스타일 접두사:
0x48 0x65 0x6c - 이스케이프 시퀀스:
\x48\x65\x6c - 콜론이나 쉼표로 나눈 바이트:
48:65:6c:6c:6f
텍스트를 16진수로. 오른쪽 텍스트 입력란에 입력하면 왼쪽에 16진수가 나타납니다.
16진수 형식에서 16진수를 쓰는 방식을 고릅니다.
- 공백 구분: 48 65 6c: 읽고 비교할 때
- 붙여 쓰기: 48656c: 짧게 저장할 때, 해시 같은 문자열
- 접두사: 0x48 0x65: C, C++ 같은 언어의 코드
- 이스케이프: \x48\x65: Python, JavaScript, 셸 스크립트의 문자열 리터럴
A~F 대문자를 켜면 글자를 대문자로 씁니다. 복사는 각 입력란의 내용을 가져가고, 지우기는 두 입력란을 모두 비웁니다.
작동 원리
디코딩할 때는 구분 기호를 없애고, 16진수 숫자만 남았는지와 자릿수가 짝수인지 확인한 다음 두 자리씩 바이트 하나로 읽습니다. 그 바이트를 UTF-8 텍스트로 디코딩합니다. 인코딩은 반대입니다. 텍스트를 UTF-8 바이트로 바꾸고, 바이트마다 16진수 두 자리로 씁니다.
16진수 한 자리는 4비트를 나타냅니다. 바이트 48은 4 × 16 + 8 = 72이고, 이는 대문자 H의 코드입니다.
한글 음절은 UTF-8에서 한 글자가 3바이트이므로 16진수로는 여섯 자리, 바이트 세 개가 됩니다. 예를 들어 한은 ed 95 9c입니다.
예시
| 16진수 | 텍스트 |
|---|---|
41 |
A |
48 69 21 |
Hi! |
48 65 6c 6c 6f |
Hello |
48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 |
Hello, World! |
63 61 66 c3 a9 |
café |
e2 82 ac |
€ |
ed 95 9c ea b8 80 |
한글 |
같은 텍스트를 각 형식으로 쓴 결과입니다.
| 형식 | café |
|---|---|
| 공백 구분 | 63 61 66 c3 a9 |
| 붙여 쓰기, 대문자 | 636166C3A9 |
| 접두사 | 0x63 0x61 0x66 0xc3 0xa9 |
| 이스케이프 | \x63\x61\x66\xc3\xa9 |
자주 보는 16진수 값
| 16진수 | 문자 | 16진수 | 문자 |
|---|---|---|---|
20 |
공백 | 30 |
0 |
0a |
줄바꿈 | 41 |
A |
0d |
캐리지 리턴 | 61 |
a |
09 |
탭 | 7e |
~ |
팁과 한계
- 이상한 결과가 나오면 대개 텍스트가 아닌 데이터입니다. 이미지, 압축 파일, 암호화된 데이터는 낯선 기호와 대체 문자로 바뀝니다. 정상적인 결과입니다.
- 숫자는 바이트 순서를 확인하세요. 이 도구는 주어진 순서대로 바이트를 읽습니다. 메모리 덤프 속 여러 바이트짜리 숫자는 리틀 엔디언으로 저장되는 경우가 많으니 오른쪽에서 왼쪽으로 읽으세요.
- 16진수 색상 코드는 텍스트가 아닙니다.
#ff8800은 글자가 아니라 빨강, 초록, 파랑의 세기를 나타냅니다. - 16진수는 암호화가 아닙니다. 바이트를 다른 방식으로 적은 것일 뿐입니다.
- EUC-KR 바이트는 깨져 보입니다. 이 도구는 UTF-8로만 디코딩합니다. 예전 한국어 인코딩인 EUC-KR(CP949)의 16진수를 붙여넣으면 한글 대신 대체 문자(�)나 엉뚱한 문자가 나옵니다. 예를 들어 EUC-KR로 저장된
한글의 바이트c7 d1 b1 db는�ѱ�로 디코딩됩니다.
다른 방법으로 16진수 변환하기
명령줄. Linux와 macOS에서는 xxd -p가 파일을 일반 16진수로 바꾸고, xxd -r -p가 다시 되돌립니다. echo -n Hello | xxd -p는 48656c6c6f를 출력합니다.
Python. bytes.fromhex('48656c6c6f').decode()는 Hello를, 'Hello'.encode().hex()는 48656c6c6f를 돌려줍니다.
JavaScript (Node). Buffer.from('48656c6c6f', 'hex').toString()은 Hello를 돌려줍니다.
Excel. =CHAR(HEX2DEC("48"))는 ASCII 바이트 하나에 대해 H를 돌려줍니다. 반대로는 =DEC2HEX(72)를 씁니다.
관련 도구
같은 바이트를 0과 1로 보려면 2진수 텍스트 변환기를 쓰세요. UTF-8 인코딩 도구는 문자마다 코드 포인트와 바이트를 보여 줍니다. 데이터가 16진수가 아니라 Base64라면 Base64 디코더를 사용해 보세요.