파일 업로드
  1. base64hub
  2. 기타 진법
  3. Base16 (hex)

Base16 인코더 및 디코더 (RFC 4648 Hex)

텍스트를 RFC 4648 Base16, 즉 0–9와 A–F로 바이트당 두 글자씩 인코딩하거나 Base16을 텍스트로 디코딩합니다. Hello는 48656C6C6F입니다.

무료 가입 없음, 제한 없음 로컬 업로드 없음 RFC 4648 8절 알파벳, 대문자 업데이트 2026. 10. 27.
입력 0바이트 0 B출력 0

브라우저에서 처리됩니다. 이 페이지는 데이터를 어디로도 보낼 수 없습니다 – 확인 방법

Base16 인코더 사용 방법

  1. 입력에 텍스트를 입력하거나 붙여넣으세요. 입력하는 동안 출력에 Base16이 나타납니다.
  2. 입력 아래의 문자 인코딩이 문자를 어떤 바이트로 바꿀지 정합니다. 기본값은 UTF-8입니다.
  3. 디코딩하려면 도구 위의 Base16 (RFC 4648) → 텍스트나 ⇄ 바꾸기 버튼을 누르세요. 버튼은 현재 출력을 입력으로 옮기기도 합니다. 입력의 소문자, 공백, 콜론은 허용됩니다.
  4. 결과를 출력 복사하거나 다운로드하세요. 변환 전과 변환 후 메뉴로 Base32나 Base64 같은 다른 형식으로 바꿔 비교할 수 있습니다.

구분자, 0x 접두사, 소문자 출력이 필요하다면 그런 옵션이 있는 텍스트를 Hex로를 쓰세요.

Base16과 RFC 4648

RFC 4648은 Base64, Base32, Base16을 나란히 정의하며, 그중 Base16이 가장 단순합니다. 패딩, 줄 바꿈, 비트 재배열이 없습니다. 모든 바이트를 4비트 두 조각으로 나누고, 각 조각을 문자 하나에 대응시킵니다. RFC의 테스트 벡터는 다음과 같습니다.

입력Base16
(빈 값)(빈 값)
f66
fo666F
foo666F6F
foob666F6F62
fooba666F6F6261
foobar666F6F626172

출력 길이는 항상 바이트 수의 정확히 두 배이므로 Base16에는 패딩 문자가 필요 없습니다. Base64와 Base32는 여러 바이트를 한 블록으로 묶기 때문에 마지막 블록을 =로 채워야 합니다. 각 인코딩이 어디에 규정되어 있는지는 RFC 개요에 정리했습니다.

Base16, Base32, Base64 비교

Hello, world 12바이트를 각 RFC 4648 인코딩으로 바꾸면 다음과 같습니다.

인코딩출력길이
Base1648656C6C6F2C20776F726C6424
Base32JBSWY3DPFQQHO33SNRSA====24 (패딩 없이 20)
Base64SGVsbG8sIHdvcmxk16

Base16은 크기를 내주고 명확함을 얻습니다. 바이트를 바로 읽고 값을 한 자리씩 비교할 수 있으며, 대소문자를 구분하지 않는 시스템을 포함해 영문자와 숫자를 다루는 어떤 시스템도 통과합니다. Base64는 3분의 1 짧고, 바이트를 JSON, 이메일, URL 안에 담아 보내야 할 때 기본으로 쓰입니다. Base58과 Base85까지 포함한 비교는 인코딩 비교에서 더 다룹니다.

Base16을 볼 수 있는 곳

  • 해시 다이제스트와 체크섬. sha256sum 같은 도구는 보통 소문자로 출력합니다.
  • OpenPGP 키 지문. GnuPG는 네 글자씩 묶은 대문자 hex로 출력합니다.
  • RFC와 기타 명세의 테스트 벡터. 길이보다 모호하지 않은 바이트 값이 더 중요한 곳입니다.
  • 대소문자를 구분하지 않거나 영숫자로만 된 데이터가 필요한 프로토콜과 형식.

이런 값을 Base64로 옮기려면, 예를 들어 API가 다이제스트를 Base64로 요구할 때는 Hex를 Base64로를 쓰세요. 반대 방향은 Base64를 Hex로입니다.

코드에서 Base16

import base64
base64.b16encode(b"Hello").decode()          # '48656C6C6F'
base64.b16decode("48656c6c6f", casefold=True)  # b'Hello'
printf 'Hello' | basenc --base16      # 48656C6C6F
echo 48656C6C6F | basenc --base16 -d  # Hello

basenc는 GNU coreutils 8.31 이상에 포함되어 있습니다. Node.js에서는 Buffer.from("Hello").toString("hex").toUpperCase()로 같은 결과를 얻습니다. 이 모듈들의 Base64 쪽은 Python과 Bash 페이지에서 다룹니다.

자주 묻는 질문

Base16과 16진수는 같은 것인가요?

바이트에 대해서는 같습니다. Base16은 RFC 4648이 hex 인코딩에 붙인 이름으로, 각 바이트가 0123456789ABCDEF 중 두 글자가 됩니다. RFC는 대문자를 규정하지만, 일상적으로 쓰는 hex는 소문자인 경우가 많습니다.

Base16은 원래 데이터보다 얼마나 커지나요?

정확히 두 배, 즉 100%의 오버헤드입니다. Base32는 60%, Base64는 약 33%를 더하므로 Base16은 RFC 4648 인코딩 중 가장 덜 압축적이지만 가장 읽기 쉽습니다.

Python의 b16decode가 왜 제 문자열을 거부하나요?

base64.b16decode는 기본적으로 대문자만 받습니다. 소문자 입력에는 casefold=True를 넘기거나, 대소문자와 공백을 모두 받는 bytes.fromhex()를 쓰세요.