텍스트를 16진수로

메모리 덤프를 읽거나, 프로토콜이 실제로 무엇을 내보냈는지 확인하거나, CTF 문제를 뜯어볼 때. 결국에는 문자열 뒤에 있는 바이트가 필요해집니다. 텍스트를 붙여넣으면 이 변환기가 한 바이트씩 16진수로 돌려줍니다. hexdump처럼 공백으로 끊어도 되고(48 65 6c 6c 6f), 끊김 없이 이어 붙여도 됩니다(48656c6c6f). 모드를 바꾸면 반대 방향으로, 붙여넣은 16진수가 다시 읽을 수 있는 텍스트가 됩니다.

변환기가 하는 일

  1. 1

    방향 고르기

    텍스트에서 16진수는 입력한 내용을 인코딩하고, 16진수에서 텍스트는 다시 문자로 되돌립니다.

  2. 2

    구분자 고르기

    인코딩할 때 바이트 사이에 공백 하나를 넣거나 아무것도 넣지 않습니다. 선택지는 이 둘뿐입니다.

  3. 3

    입력 붙여넣기

    텍스트는 UTF-8로 읽습니다. 16진수는 0x나 \x 접두사, 쉼표, 공백, 줄바꿈이 섞여 있어도 됩니다. 알아서 제거됩니다.

  4. 4

    변환하고 복사하기

    결과가 아래에 복사 버튼과 함께 나타납니다. 내려받는 파일은 없습니다.

왜 10진수가 아니라 16진수인가

16진수 한 자리는 정확히 4비트를 담으므로, 두 자리면 언제나 정확히 한 바이트가 됩니다. 10진수에서는 값이 아직 범위에 들어가는지 계산해봐야 알지만(128은 범위 안인가, 256은?), 16진수는 그것을 그대로 보여줍니다. 00이 가장 작은 바이트, ff가 가장 큰 바이트이고, 그 사이의 모든 바이트는 폭이 두 글자입니다. 이 가지런함 덕분에 메모리 덤프, 패킷 캡처, 파일 시그니처, 색상 코드가 모두 16진수로 적힙니다.

이 변환기가 실제로 내놓는 것

  • 항상 소문자. 인코더는 6c로 쓰고 6C로 쓰지 않습니다. 16진수는 대소문자를 구분하지 않으니 잃는 정보는 없지만, 목표 형식이 대문자를 요구한다면 결과를 대소문자 변환 도구에 한 번 넣으세요.
  • 바이트당 항상 두 자리. 탭 문자는 9가 아니라 09입니다. 바이트 경계를 셀 수 있게 하기 위해서입니다.
  • 공백이거나 없거나. 구분자는 이 두 가지뿐입니다. 인코딩 쪽에서는 0x나 \x 접두사가 붙지 않으니, C나 파이썬 이스케이프 문자열이 필요하면 편집기에서 직접 붙이세요.
  • 처음부터 끝까지 UTF-8. 텍스트는 글자 수가 아니라 바이트 수로 셉니다.

16진수와 유니코드

H는 UTF-8에서 1바이트라 48이 됩니다. 순수 ASCII를 벗어나는 문자는 더 많이 차지합니다.

문자 UTF-8 16진수 바이트
A 41 1
é c3 a9 2
€ e2 82 ac 3
🚀 f0 9f 9a 80 4

그래서 Hello는 48 65 6c 6c 6f가 되어 5글자에 5바이트지만, café는 63 61 66 c3 a9가 되어 4글자에 5바이트입니다. é가 2바이트를 쓰기 때문입니다. 한글은 더 큽니다. 완성형 한글 한 글자는 UTF-8에서 3바이트라, 안녕 두 글자만으로 여섯 쌍이 나옵니다: ec 95 88 eb 85 95. 짧은 문자열인데 16진수 쌍이 생각보다 많다면 대개 이 때문입니다.

디코더가 받아들이는 형태

아래 어느 것을 붙여넣어도 Hello가 돌아옵니다.

  • 48 65 6c 6c 6f, hexdump 방식
  • 48656c6c6f, 구분자 없는 날것
  • 0x48656c6c6f, 정수 리터럴 방식
  • \x48\x65\x6c\x6c\x6f, C와 파이썬 이스케이프
  • 48,65,6C,6C,6F, 쉼표 구분에 대소문자가 섞여 있어도 무방

접두사, 쉼표, 공백, 탭, 줄바꿈은 디코딩 전에 제거됩니다. 그 밖의 것은 제거되지 않습니다. 48-65의 붙임표, 색상 코드 앞의 #, f를 넘어가는 알파벳은 디코딩을 멈추게 하고, 자릿수가 홀수일 때도 마찬가지입니다. 반 바이트는 문자가 될 수 없기 때문입니다. 이런 경우 도구는 어설픈 결과를 추측하기보다 아무것도 돌려주지 않는 쪽을 택합니다. 출력 칸이 계속 비어 있다면 여기를 살펴보세요.

16진수 색상 코드는 표기만 같고 내용은 다르다

#ff8800도 같은 16진법을 쓰지만, 그 세 바이트는 문자가 아니라 빨강·초록·파랑 채널을 나타냅니다. #를 떼고 여기서 디코딩하면 읽을 수 있는 텍스트가 아닌 원시 바이트 세 개가 나옵니다. 그런 용도에는 색상 선택 도구를 쓰세요.

자주 묻는 질문

같습니다. 16진수와 base16은 같은 체계를 부르는 두 이름으로, 열여섯 개의 숫자(0에서 9, a에서 f)를 쓰며 하나가 4비트를 담습니다.

이 도구에서는 안 됩니다. 인코더는 항상 소문자로 씁니다. 16진수는 대소문자를 구분하지 않으므로 4f와 4F는 같은 바이트입니다. 형식이 요구한다면 결과를 아무 대소문자 변환 도구에 넣으면 됩니다. 디코더는 두 형태 모두 문제없이 읽습니다.

디코더는 0x와 \x 접두사, 쉼표, 공백을 제거한 뒤 0에서 9, a에서 f 사이의 문자가 짝수 개일 때만 받아들입니다. 붙임표, #, f를 넘어가는 알파벳, 빠진 한 자리가 있으면 입력이 무효가 되고, 도구는 틀린 결과보다 빈 결과를 택합니다. 자릿수를 세어 보고 섞여 들어간 문장 부호를 찾아보세요.

대부분의 이모지는 유니코드 보충 평면에 있고, UTF-8은 이를 4바이트로 저장합니다. 순수 ASCII 문자는 한 글자에 1바이트로 남기 때문에 영문은 글자당 한 쌍이 나오지만 한글은 그렇지 않습니다.

아니요. 여기는 텍스트 입력란이라 입력하거나 붙여넣을 수 있는 것만 처리합니다. 이진 데이터라면 base64가 더 작고 옮기기도 쉽습니다.

전송됩니다. 변환은 저희 서버에서 실행되므로 붙여넣은 내용이 요청과 함께 전달되고 결과가 돌아옵니다. 저희가 남기는 기록은 어떤 동작을 했는지와 선택한 옵션뿐이며 텍스트 자체는 절대 기록하지 않고, 응답 이후에도 텍스트를 보관하지 않습니다. 정말 민감한 내용이라면 본인 컴퓨터에서 오프라인으로 동작하는 변환 도구를 쓰세요.

관련 도구

이 도구는 다른 언어로도 제공됩니다