도구
가이드

진법 변환기

변환

BigInt로 2~62진법을 상호 변환합니다. 아주 큰 정수도 정밀도 손실이 없습니다.

100% 클라이언트 백엔드 없음
출력
10진수
이 페이지에서

진법(radix) 변환기란?#

모든 정수는 같은 수입니다. 다만 밑(base)에 따라 표기가 달라질 뿐입니다. 10진수 255, 16진수 ff, 2진수 11111111, 8진수 377은 모두 같은 값을 가리키는 네 개의 문자열입니다. 진법 변환기는 한 표기를 다른 표기로 바꿔 줍니다. 이런 도구가 parseInt와는 별개로 존재해야 하는 이유는, JavaScript의 Number가 2^53(약 16자리)을 넘기면 정밀도를 조용히 잃어버리기 때문입니다. 그래서 18446744073709551616 같은 64비트 식별자를 일반 Number로 변환하면 경고 없이 다른 수가 돌아옵니다.

이 페이지는 끝까지 BigInt 기반으로 동작하므로 임의 크기의 정수도 모든 변환에서 완전한 정밀도를 유지합니다. 2진법부터 62진법까지 지원하며, 표준 숫자 알파벳인 0-9, 이어서 a-z, 다음으로 A-Z를 사용합니다. 편의상 236진법은 대소문자를 구분하지 않습니다(16진수 255에 FF를 써도 됨). 3762진법은 대소문자를 구분합니다. 62진법에서 소문자 a와 대문자 A는 서로 다른 두 숫자(10과 36)이기 때문입니다.

사용 방법#

  1. 변환하려는 을 입력합니다. 페이지는 255로 시작합니다.
  2. 변환할 진법을 값이 현재 표기된 밑으로 설정합니다(드롭다운이 2~62를 제공, 기본값 10진수).
  3. 결과 진법을 원하는 밑으로 설정합니다(기본값 16진수). 그 사이의 화살표는 단순한 시각적 표시일 뿐입니다.
  4. 출력 상자가 변환된 표기를 실시간으로 보여 주고, 아래 10진수 행은 같은 값을 10진법으로 표시합니다. 낯선 두 진법 사이를 변환할 때 유용한 건전성 검사입니다.
  5. 예제 는 기본값을 다시 불러오고, 지우기 는 필드를 비웁니다. 선택한 진법에 유효하지 않은 숫자가 들어오면 상태 줄에 보고됩니다(8진법에 8을 입력하거나 16진법에 g를 입력해도 조용히 말도 안 되는 값을 내놓지 않습니다).

주요 기능#

  • BigInt 정밀도. 임의 정밀도 정수로 변환이 동작하므로 2^64 이상도 완벽하게 왕복합니다. 2^53의 벼랑도 없고 부동소수점 근사도 없습니다.
  • 2~62진법. 2진·8진·10진·16진·base32·base36·base58 스타일 알파벳과 완전한 base62까지, 실제 시스템이 사용하는 범위를 모두 다룹니다.
  • 대소문자를 구분하는 파싱. 236진법은 편의상 대소문자 무시, 3762진법은 대소문자를 의미 있게 취급하여 aA가 표준 62기호 알파벳에서처럼 서로 다른 숫자로 남습니다.
  • 자릿수 그룹 밑줄 허용. 1_000을 붙여넣으면 1000으로 읽습니다. 많은 프로그래밍 언어가 가독성을 위해 사용하는 관행입니다.
  • 부호 처리. 음수도 올바르게 변환되며, 마이너스 부호는 모든 진법에서 보존됩니다.

사용 예#

기본값 255, 변환할 진법 10, 결과 진법 16에서 패널은 다음을 보여 줍니다.

Output:   ff
Decimal:  255

결과 진법2로 바꾸면 11111111이 나옵니다. 8비트, 정확히 1바이트에 들어맞는 값입니다. 그래서 ff가 색상 코드나 바이트 덤프에서 그렇게 익숙하게 보이는 것이죠.

BigInt가 필요한 진짜 이유는 64비트 값에서 드러납니다. 18446744073709551616(2^64)을 입력하고, 변환할 진법 10, 결과 진법 16:

Output:   10000000000000000
Decimal:  18446744073709551616

1 뒤에 0이 16개, 즉 정확히 16진수로 나타낸 2^64입니다. JavaScript Number로 만든 변환기라면 시작하기도 전에 입력을 18446744073709552000으로 반올림했을 것이고, 눈치채지 못했을 것입니다. 변환할 진법 16 / 결과 진법 10으로 되돌리면 원래 10진수가 그대로 돌아오는데, 이것이 정밀도 손실이 없었음을 증명하는 테스트입니다.

FAQ#

왜 16진법에서는 FF가 되는데 62진법에서는 안 되나요?#

2~36진법은 하나의 문자 범위(az, 10–35에 매핑)를 공유하므로 대소문자가 무관하고 FF = ff = 255입니다. 37진법 이상부터는 알파벳이 26자를 넘기 때문에 대문자까지 확장됩니다. a=10, b=11 … z=35, A=36, B=37 … Z=61. 두 케이스가 모두 쓰이는 순간 aA는 서로 다른 숫자가 되므로 파서는 대소문자를 보존해야 합니다.

해당 진법에 유효하지 않은 숫자를 입력하면 어떻게 되나요?#

틀린 답이 아니라 명확한 오류가 나옵니다. 변환할 진법을 8(8진법)로 하고 8이나 9를 입력하거나, 16(16진법)으로 하고 g를 입력하면 그 진법의 합법적인 숫자가 아니기 때문에 거부됩니다. 상태 줄이 문제가 되는 문자를 알려 줍니다.

다른 진법으로 변환하는데 왜 10진수 행도 보여 주나요?#

인간은 10진법으로 생각하므로 가장 자연스러운 건전성 검사이기 때문입니다. base-58 q를 base-16으로 변환해 1a를 얻었다면, 10진수 행(26)을 보고 “맞아, 58번째쯤의 기호가 정말 26을 의미했구나”를 직접 계산하지 않고도 확인할 수 있습니다.

3.14 같은 분수도 처리하나요?#

아닙니다. 이 변환기는 정수만 다룹니다. 소수 부분의 진법 변환은 다른 문제입니다(대부분의 밑에서 1/3이 10진법에서 그런 것처럼 무한히 반복되는 전개를 만듭니다). 이를 조용히 잘라내면 오해를 부릅니다. 임의 크기의 정수 값에 대해서는 변환이 정확하고 즉각적입니다.