언어: 한국어

tools / hex

hex/

텍스트와 16진수(hex)를 서로 변환합니다. 문자 집합은 UTF-8, GBK, UTF-16 등을 고를 수 있고, 출력에는 구분자, 대문자, 0x 또는 \x 접두어를 적용할 수 있습니다.

텍스트

hex

자주 묻는 질문

한자 한 글자는 16진수로 몇 바이트이고, 다른 도구와 결과가 다른 이유는 무엇인가요?

문자 집합에 따라 다릅니다. UTF-8에서 흔한 한자는 3바이트이며, 예를 들어 中은 e4 b8 ad입니다. GBK, GB2312에서는 2바이트이고 中은 d6 d0입니다. 이모지는 UTF-8에서 4바이트입니다. 한글도 UTF-8에서는 3바이트입니다(예: 한은 ed 95 9c). 영문자와 숫자는 UTF-8, GBK 모두 1바이트라 결과가 같습니다. 다른 도구와 결과가 맞지 않으면 그 도구가 어떤 문자 집합을 쓰는지 먼저 확인하세요. 이 페이지의 기본값은 UTF-8입니다.

16진수를 텍스트로 바꿀 때 바이트가 올바른 텍스트가 아니라고 나오거나 결과가 깨져 보이면 어떻게 하나요?

바이트가 현재 문자 집합으로 인코딩된 것이 아니라는 뜻이므로 다른 문자 집합을 골라 보세요. 중국어 텍스트는 UTF-8과 GBK가 가장 흔하고, 오래된 소프트웨어나 데이터베이스 내보내기 파일은 GBK를 많이 씁니다. UTF-16의 16진수에는 보통 00이 많이 들어 있습니다. 이 도구는 디코딩할 수 없는 바이트를 깨진 글자로 억지로 보여 주지 않습니다. 예외는 ISO-8859-1로, 모든 바이트가 어떤 문자에든 대응되므로 오류는 나지 않지만 중국어 텍스트는 깨진 글자로 바뀝니다. GBK와 GB2312는 둘 다 브라우저에 내장된 GB18030 디코더로 처리하므로 Python이나 Java보다 느슨하게 동작하며, GB2312를 골라도 GBK에만 있는 글자까지 디코딩됩니다. 바이트가 애초에 텍스트가 아니라면(이미지, 암호화된 데이터, 해시 값) 어떤 문자 집합을 골라도 디코딩할 수 없습니다.

16진수를 텍스트로 바꿀 때 어떤 표기를 인식하나요?

대소문자는 구분하지 않습니다. 바이트 사이는 공백, 줄바꿈, 탭, 콜론, 쉼표, 하이픈으로 구분해도 되고 구분하지 않아도 됩니다. 바이트마다 앞에 0x나 \x를 붙여도 되므로 0x48,0x65와 \x48\x65를 그대로 디코딩할 수 있습니다. 구분자와 구분자 사이의 자릿수는 짝수여야 하므로 0x1은 0x01로 써야 합니다. 0-9, a-f 이외의 문자가 섞여 있어도 오류가 나며, 두 경우 모두 몇 번째 문자인지 알려 줍니다. U+4E2D나 %E4%B8%AD 같은 표기는 인식하지 않으니, URL 인코딩은 이 사이트의 URL 인코딩 / 디코딩 도구를 쓰세요.

0x48,0x65나 \x48\x65 같은 형식은 어떻게 만드나요?

구분자를 ","로, 접두어를 "0x"로 고르면 0x48,0x65가 나오며, C나 Java의 바이트 배열에 그대로 넣을 수 있습니다. 구분자를 "없음"으로, 접두어를 "\x"로 고르면 \x48\x65가 나오며, Python과 C 문자열에서 쓰는 바이트 표기입니다. 접두어는 바이트마다 앞에 붙으므로 구분자를 "없음"으로 하고 0x를 고르면 0x480x65가 되어 쓸 일이 거의 없습니다. "대문자"는 a-f에만 적용되고 0x의 x는 그대로입니다.

UTF-16 결과 맨 앞에 feff가 붙는 이유는 무엇이고, 다른 도구와 결과가 다른 이유는 무엇인가요?

UTF-16은 Java 방식으로 출력합니다. 맨 앞에 FE FF(바이트 순서 표시, BOM)가 오고 그 뒤는 빅 엔디언이라 中은 fe ff 4e 2d가 됩니다. 표시가 없는 UTF-16BE는 4e 2d이므로, 결과를 복사한 뒤 맨 앞의 두 바이트를 지우면 됩니다. UTF-32는 표시가 없는 빅 엔디언이며 中은 00 00 4e 2d입니다. 디코딩할 때 UTF-16은 맨 앞의 FE FF(빅 엔디언)와 FF FE(리틀 엔디언)를 인식하고, 표시가 없으면 빅 엔디언으로 간주합니다.

ASCII나 ISO-8859-1을 고르고 한글이나 한자를 입력하면 오류가 나는 이유는 무엇인가요?

ASCII는 0~127의 문자만 나타낼 수 있고, ISO-8859-1은 U+00FF까지입니다(악센트가 붙은 서유럽 문자까지이며, 한자와 한글은 없습니다). 이 범위를 벗어난 문자는 Java의 getBytes처럼 조용히 ?로 바뀌지 않고 "문자 '中'은(는) ASCII로 인코딩할 수 없습니다" 같은 오류가 납니다. GBK와 GB2312도 마찬가지로, 이모지나 코드표에 없는 드문 한자는 오류가 납니다. UTF-8이나 GB18030으로 바꾸면 변환할 수 있습니다.

입력한 공백과 줄바꿈도 변환되나요?

텍스트 → hex에서는 변환됩니다. 입력란의 모든 문자가 변환 대상이며 앞뒤의 공백과 줄바꿈도 포함됩니다. 공백은 20, 줄바꿈은 0a입니다. 브라우저의 입력란은 줄바꿈을 \n으로 통일하므로 여러 줄 텍스트의 줄바꿈은 0d 0a가 아니라 0a가 됩니다. Windows 줄바꿈이 필요하면 결과를 직접 고치세요. 반대로 hex → 텍스트에서는 hex 안의 공백 문자는 무시되고 바이트만 계산에 들어가며, 결과에 0d 0a가 있어도 줄바꿈 한 번으로만 표시됩니다.

입력한 내용이 업로드되나요?

아니요. 변환은 브라우저 안에서 이루어지며 네트워크 요청을 보내지 않고 저장도 하지 않습니다.