2진수를 텍스트로 번역하는 방법
- 입력 · 2진수에 2진수를 붙여넣으세요. 바이트는 공백, 줄 바꿈, 쉼표, 세미콜론,
|로 구분하거나 아예 구분하지 않아도 됩니다. - 입력하는 동안 출력 · 텍스트에 텍스트가 나타납니다.
�가 보이면 비트가 올바른 UTF-8이 아닙니다. 출력 아래의 문자 인코딩을 ISO-8859-1 등 다른 것으로 바꿔 보세요. 한글이 깨진다면 EUC-KR일 수 있습니다.- 출력 복사는 텍스트를 복사합니다. 도구 위의 텍스트 → 2진수를 누르거나 텍스트를 2진수로를 열면 방향이 바뀝니다.
2진수를 손으로 읽는 방법
8비트 그룹 하나가 1바이트입니다. 각 자리에 왼쪽 128부터 오른쪽 1까지 값을 매기고, 1이 있는 자리의 값을 더하세요.
| 비트 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
|---|---|---|---|---|---|---|---|---|
| 값 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
01001000은 64 + 8 = 72이고, ASCII에서 72번 문자는 H입니다. 01101001은 64 + 32 + 8 + 1 = 105로 i입니다.
ASCII는 규칙적으로 배치되어 있어서 영문자라면 계산할 일이 거의 없습니다. 앞의 세 비트가 문자의 종류를 알려 주고, 영문자라면 뒤의 다섯 비트가 알파벳 순서입니다.
| 시작 비트 | 의미 | 예시 |
|---|---|---|
010 | 대문자 | 01000001 A, 01001000 H, 01011010 Z |
011 | 소문자 | 01100001 a, 01101001 i, 01111010 z |
0011 | 숫자 | 00110000 0, 00111001 9 |
00100000 | 공백 |
그래서 01000011은 00011, 즉 3으로 끝나므로 세 번째 글자 C입니다. 대문자와 소문자는 왼쪽에서 세 번째 비트 하나만 다릅니다.
번역기가 받는 형식
| 입력 | 해석 |
|---|---|
01001000 01101001 | 공백이나 줄 바꿈으로 나눈 8비트 그룹 |
01001000,01101001 또는 01001000;01101001 | 쉼표, 세미콜론, |를 구분자로 사용 |
0b01001000 0b01101001 | 0b 접두사는 무시 |
1001000 1101001 | 전통적인 7비트 ASCII 연습 문제 같은 7비트 그룹 |
0100100001101001 | 비트 문자열 하나를 8비트씩 자름 |
모두 Hi로 디코딩됩니다. 8비트보다 짧은 그룹은 한 바이트로 읽히므로 7비트 버전도 됩니다. 8비트보다 긴 그룹이 하나라도 있으면 도구는 모든 비트를 하나의 문자열로 이어 붙인 뒤 바이트로 자릅니다. 0, 1, 구분자 이외의 문자가 나오면 잘못된 문자의 위치를 알려 주고 변환을 멈추며, 메시지 옆의 표시 버튼을 누르면 입력에서 그 문자가 선택됩니다.
일반 ASCII가 아닌 2진수
ASCII 바이트는 항상 0으로 시작합니다. 1로 시작하는 바이트는 여러 바이트로 된 UTF-8 문자의 일부이며, 앞쪽 비트가 시퀀스의 길이를 알려 줍니다.
| 문자 | UTF-8 비트 | 패턴 |
|---|---|---|
é | 11000011 10101001 | 110은 2바이트 문자의 시작, 10은 이어지는 바이트 |
€ | 11100010 10000010 10101100 | 1110은 3바이트 문자의 시작 |
👋 | 11110000 10011111 10010001 10001011 | 11110은 4바이트 문자의 시작 |
이것을 한 바이트씩 디코딩하면 é 같은 깨진 글자가 나옵니다. 바이트를 묶어 두고 문자 인코딩은 UTF-8로 두세요.
2진수에서 Base64로
2진수, hex, Base64는 모두 같은 바이트를 쓰는 방법입니다. 2진수는 바이트당 8문자, hex는 2문자, Base64는 약 1.33문자이므로, 시스템이 텍스트로 바이너리 데이터를 옮길 때는 Base64를 씁니다. 이메일 첨부 파일, JSON 필드, data URI가 그 예입니다. 비트를 바로 Base64로 바꾸려면 2진수를 Base64로를 사용하세요. Base64 문자열 속 비트를 보려면 Base64를 2진수로를 쓰고, 그 비트를 6개씩 다시 묶는 과정은 Base64의 작동 원리에서 볼 수 있습니다.
코드에서 2진수를 텍스트로
bits = "01001000 01101001"
bytes(int(b, 2) for b in bits.split()).decode("utf-8") # 'Hi'
const bits = "01001000 01101001";
new TextDecoder().decode(Uint8Array.from(bits.split(" "), b => parseInt(b, 2))); // 'Hi'
두 코드 모두 그룹이 공백 하나로 구분되어 있다고 가정합니다. 위의 도구는 입력 형식에 더 관대합니다.
자주 묻는 질문
01001001 00100000 01101100 01101111 01110110 01100101 00100000 01111001 01101111 01110101는 무슨 뜻인가요?
I love you입니다. 8비트 그룹 하나가 ASCII 문자 하나이고, 00100000은 단어 사이의 공백입니다.
글자 하나는 2진수 몇 자리인가요?
일반 ASCII 텍스트의 영문자나 숫자는 8자리, 즉 1바이트입니다. UTF-8에서 악센트 문자는 16비트, 한글을 비롯한 대부분의 다른 문자는 16비트나 24비트, 이모지는 32비트입니다.
공백이 없는 2진수도 번역할 수 있나요?
네. 0100100001101001 같은 연속 문자열은 왼쪽부터 8비트씩 잘립니다. 길이는 8의 배수여야 하며, 그렇지 않으면 도구가 찾은 비트 수를 알려 줍니다.
2진수를 번역하면 알아볼 수 없는 글자가 나오는 이유는 무엇인가요?
대개 공백 없는 문자열에서 비트가 하나 빠지거나 더 들어가 뒤의 모든 바이트가 밀린 것입니다. 가능하면 바이트 사이에 공백을 넣으세요. 그러면 잘못된 그룹 하나가 문자 하나만 망가뜨리고 나머지는 제대로 읽힙니다.