텍스트 ↔ 16진수 변환기
브라우저에서 바로 텍스트를 16진수로, 16진수를 다시 텍스트로 변환하세요. UTF-8을 완벽히 지원하므로 모든 문자가 정확하게 인코딩됩니다. 출력은 소문자와 대문자 중에서, 그리고 공백으로 구분된 바이트와 연속된 바이트 중에서 선택할 수 있습니다.
대소문자
구분자
위에 데이터를 입력하면 변환 결과가 여기에 표시됩니다.
텍스트 ↔ 16진수 변환기 사용 방법
- 1
변환 방향 선택
토글을 사용해 ‘텍스트 → 16진수’ 또는 ‘16진수 → 텍스트’를 선택하세요. 바꾸기 버튼을 누르면 결과가 입력란으로 옮겨져 반대 방향으로 다시 변환할 수 있습니다.
- 2
데이터 입력
텍스트를 입력하거나 붙여넣고, 또는 16진수 문자열을 붙여넣으세요. 입력하는 즉시 변환이 자동으로 실행되며, UTF-8을 완벽히 지원해 어떤 문자든 처리할 수 있습니다.
- 3
형식 선택
16진수 출력에서는 소문자와 대문자 중에서 자릿수 표기를 고르고, 바이트마다 공백을 넣거나 끊김 없는 스트림으로 출력할 수 있습니다. 디코딩할 때는 공백과 쉼표, 콜론이 모두 선택 사항입니다.
- 4
결과 복사
변환된 결과를 확인한 뒤 클립보드에 복사하면, 필요한 곳 어디에나 바로 붙여넣을 수 있습니다.
텍스트에서 16진수로: 완벽 가이드
16진수란 무엇인가
16진수는 흔히 hex로 줄여 부르며, 밑이 16인 기수법입니다. 10진법은 열 개, 2진법은 두 개의 숫자 기호를 사용하는 반면 16진수는 열여섯 개를 사용합니다. 0부터 9까지의 숫자로 0에서 9까지의 값을 나타내고, 이어서 A부터 F까지의 글자로 10에서 15까지의 값을 나타냅니다. 즉 A는 10, B는 11, C는 12, D는 13, E는 14, F는 15입니다. 대소문자는 값을 바꾸지 않으므로 0xff와 0xFF는 같은 수입니다.
16진수는 프로그래머가 2진수를 간략히 표기하는 수단입니다. 4비트가 열여섯 가지 값을 담을 수 있기 때문에 16진수 한 자리는 정확히 4비트에 대응하며, 따라서 16진수 두 자리는 8비트짜리 바이트 하나를 완벽하게 나타냅니다. 이렇게 딱 들어맞기 때문에 바이트는 0과 1이 길게 늘어선 문자열보다 거의 항상 16진수로 표기됩니다. 훨씬 더 간결하고 읽기도 훨씬 쉽기 때문입니다.
바이트마다 16진수 두 자리
바이트는 8비트로, 0부터 255까지의 값을 담을 수 있습니다. 16진수에서 이 범위는 00부터 FF까지 정확히 두 자리로 표기되며, FF는 255와 같습니다. 왼쪽 자리는 상위 4비트를 나타내며 가중치가 16이고, 오른쪽 자리는 하위 4비트를 나타내며 가중치가 1입니다. 바이트의 값을 구하려면 왼쪽 자리에 16을 곱한 뒤 오른쪽 자리를 더하면 됩니다.
이 도구는 각 바이트를 항상 두 자리 16진수 쌍으로 표기하며, 필요할 때는 앞에 0을 채워 넣습니다. 그래서 값이 5인 바이트는 그냥 5가 아니라 05로 표시됩니다. 자릿수를 항상 두 자리로 고정하면 바이트가 가지런히 정렬되어 16진수 덤프를 모호함 없이 읽을 수 있습니다. 자릿수는 소문자나 대문자로 표시할 수 있고, 바이트는 공백으로 구분하거나 붙여서 이어 쓸 수 있습니다.
문자에서 16진수로, 단계별로
문자를 16진수로 변환하는 과정은 두 단계입니다. 먼저 문자의 바이트 값을 구하고, 그 값을 16진법으로 표기하면 됩니다. ASCII 문자의 경우 바이트 값은 우리에게 익숙한 코드 포인트와 같습니다. 대문자 A는 10진수로 65입니다. 65를 16진수로 바꾸려면 16으로 나눕니다. 65는 4 곱하기 16(즉 64)에 나머지 1이므로 상위 자리는 4, 하위 자리는 1이 되어 0x41이 됩니다.
그래서 A = 0x41은 컴퓨팅에서 가장 널리 알려진 값 중 하나입니다. 같은 방법으로 코드 97인 소문자 a는 0x61(6 곱하기 16은 96, 나머지 1)이 되고, 코드 32인 공백 문자는 0x20(2 곱하기 16은 32, 나머지 0)이 됩니다. 반대로 되돌릴 때는 첫 번째 16진수 자리에 16을 곱하고 두 번째 자리를 더해 10진수 코드를 복원한 다음, 해당 문자를 찾으면 됩니다.
예제 풀이: “Hex” 인코딩하기
H, e, x 세 글자를 변환에 넣어 봅시다. H는 코드 72이며, 16으로 나누면 몫 4에 나머지 8이므로 0x48입니다. 글자 e는 코드 101로, 6 곱하기 16(96)에 나머지 5이므로 0x65입니다. 글자 x는 코드 120으로, 7 곱하기 16(112)에 나머지 8이므로 0x78입니다.
공백으로 구분한 대문자 덤프로 표기하면 “Hex”라는 단어는 48 65 78이 됩니다. 구분자 없이 소문자로 쓰면 486578입니다. 디코딩은 이 계산을 거꾸로 수행합니다. 48은 4 곱하기 16에 8을 더한 72이고 이는 H, 65는 101이고 이는 e, 78은 120이고 이는 x이므로 원래 단어가 복원됩니다.
ASCII 대 UTF-8, 그리고 멀티바이트 문자
한 문자에 두 자리라는 규칙은 코드 포인트 0부터 127까지인 원래의 ASCII 집합에만 깔끔하게 적용됩니다. 그 범위를 벗어나는 모든 것, 즉 악센트가 붙은 글자, 라틴 문자가 아닌 문자 체계, 기호, 이모지에는 이 도구가 가변 길이 방식인 UTF-8을 사용합니다. ASCII 문자는 1바이트이므로 16진수 쌍 하나로 표현되지만, 그 밖의 문자는 2바이트, 3바이트, 또는 4바이트를 차지하므로 16진수 쌍이 두 개, 세 개, 또는 네 개 필요합니다.
예를 들어 악센트가 붙은 é는 UTF-8 바이트 0xC3과 0xA9 두 개로 이루어지므로, 쌍 하나가 아니라 16진수 C3 A9로 변환됩니다. 흔히 쓰이는 이모지는 4바이트라서 16진수 쌍 네 개가 됩니다. 이 때문에 영어가 아닌 텍스트는 눈에 보이는 문자 수보다 더 많은 16진수를 만들어 내며, 글자가 아니라 바이트를 셀 때는 이 점을 기억해 둘 필요가 있습니다.
유연한 디코딩
16진수 → 텍스트 방향은 입력을 두 자리씩 읽으며, 형식에 대해서는 일부러 관대하게 처리합니다. 바이트 사이의 공백, 쉼표, 콜론은 모두 무시되므로 486578처럼 붙여 쓴 문자열, 48 65 78처럼 공백으로 구분한 덤프, 48:65:78처럼 콜론으로 구분한 덤프가 모두 같은 단어로 디코딩됩니다. 소문자와 대문자 자릿수는 어떻게 섞여 있어도 모두 허용됩니다.
다만 두 가지 규칙은 반드시 지켜져야 합니다. 입력에는 유효한 16진수 문자(0-9와 A-F, 그리고 무시되는 구분자)만 들어 있어야 하고, 모든 바이트에는 정확히 두 자리가 필요하므로 16진수 자릿수의 개수가 짝수여야 합니다. 변환 오류는 거의 언제나 16진수가 아닌 엉뚱한 문자가 섞여 들어갔거나 자릿수가 홀수로 나왔다는 뜻이며, 어쩌면 어떤 바이트에서 자릿수 하나가 빠졌을 수도 있습니다. 이를 바로잡으면 디코딩이 완료됩니다.
16진수가 쓰이는 곳
16진수는 프로그래밍과 디버깅 곳곳에 등장합니다. 두 자리가 바이트 하나에 아주 깔끔하게 대응하기 때문에 메모리 주소, 바이트 오프셋, 원시 데이터 덤프가 모두 16진수로 표시됩니다. 16진수 편집기로 파일이나 네트워크 패킷을 들여다볼 때 보게 되는 것은 바로 이 도구가 만들어 내는 것과 똑같은 형태의 출력입니다. 또한 16진수는 해시나 UUID처럼 2진 식별자를 간결하게 인코딩하는 데에도 쓰입니다.
바이트 덤프 밖에서도 16진수를 본 적이 있을 것입니다. CSS와 디자인 도구는 색상을 #FF8800 같은 16진수 세 쌍으로 표기하는데, 각 쌍은 00부터 FF까지의 빨강, 초록, 파랑 강도를 나타냅니다. 여러 프로그래밍 언어의 문자 이스케이프도 16진수를 사용하는데, 글자 A를 뜻하는 \x41이 그 예입니다. 텍스트를 16진수로 변환하면 문자열 뒤에 숨은 정확한 바이트 값을 살펴보거나, 인코딩을 검증하거나, 16진수를 요구하는 환경에 맞게 데이터를 준비하는 일을 빠르게 처리할 수 있습니다.
자주 묻는 질문
텍스트는 어떻게 16진수로 변환되나요?
이모지나 영어가 아닌 문자도 지원하나요?
디코더는 어떤 16진수 형식을 지원하나요?
변환 오류는 왜 발생하나요?
내 데이터가 서버로 전송되나요?
관련 도구
이런 편리한 도구도 함께 사용해 보세요