평소에 접하기 어려운 특수한 파일을 다룰 때는 파일을 구성하는 실제 비트를 직접 들여다보는 것이 매우 유용합니다. 최소한 파일의 헤더를 읽어 그 용도를 파악할 수 있기 때문입니다. 16진수 코드 편집은 복잡한 작업이지만, macOS에서는 다양한 헥스 에디터를 통해 충분히 가능합니다. 그렇다면 16진수 코드란 정확히 무엇이며, 왜 이를 살펴볼 가치가 있을까요?
16진수 코드란 무엇인가?
컴퓨팅 분야에서 16진수(hexadecimal)는 이진 값을 더 간결하게 표현하는 방법입니다. 이진법이 밑이 2인 체계라면, 16진수는 밑이 16인 수 체계를 사용합니다. 표현할 수 있는 숫자 공간이 넓어지기 때문에 여러 개의 이진 자릿수를 하나의 16진수 자릿수로 나타낼 수 있습니다. 즉, 16진수 한 자리는 정확히 네 개의 이진 자릿수를 표현합니다. 이진법을 기억하고 있다면 반 바이트(nibble)가 정확히 16가지 값을 가질 수 있다는 점을 떠올릴 것입니다. 이는 16진수 한 자리가 표현할 수 있는 값의 개수와 같습니다. 아래 표에서 두 체계의 대응 관계를 확인해 보세요.

16진수 두 자리를 조합하면 8비트, 즉 1바이트의 정보를 표현할 수 있습니다. 하나의 바이트는 0000 0000부터 1111 1111까지의 범위를 가지며, 16진수로는 각각 00부터 FF까지 해당합니다. 16진수 값을 두 자리씩 짝지어 나열하면 파일의 이진 데이터를 바이트 단위로 손쉽게 구분할 수 있습니다.
본질적으로 16진수와 이진수는 동일한 데이터를 서로 다른 '틀'로 바라보는 것에 불과합니다. 사람은 16진수를 읽기 쉽고, 컴퓨터는 이진수를 읽기 쉬운 셈입니다.
16진수 값 읽고 쓰는 규칙
16진수 값을 표기할 때는 앞에 0x라는 문자를 붙이는 경우가 많습니다. 이 접두사는 뒤따르는 값이 16진수임을 나타냅니다. 16진수, 2진수, 8진수는 언뜻 보기에 비슷해 보일 수 있으므로, 이렇게 예약된 접두사는 혼동을 막고 오류를 줄여줍니다.
예를 들어 0x2FF0C4는 메모리상의 16진수 주소로, 이진수로는 0010 1111 1111 0000 1100 0100, 십진수로는 3,141,828에 해당합니다. 실제 값으로 계산되는 부분은 2FF0C4뿐이며, 앞의 0x는 수 체계를 표시하는 역할만 합니다.
문서 전체가 16진수로 처리될 때는 FF A0 2D CE처럼 값이 두 자리씩 짝을 이루어 표시됩니다. 이렇게 하면 값들이 바이트 길이의 문자열로 깔끔하게 나뉘어 사람이 해석하기가 훨씬 수월해집니다.
macOS에서 16진수 코드 확인하고 편집하기
macOS에서 16진수 코드를 보려면 헥스 뷰어 애플리케이션이 필요합니다. 무료로 사용할 수 있는 몇 가지 선택지가 있습니다.
- 0xED: 무료이면서 간단한 인코더로, 일부 사용자 지정 옵션도 제공합니다. 16진수 값을 명확하고 빠르게 해석하는 데 초점을 맞춘 앱으로, 겉모습은 소박하지만 헥스 에디터를 처음 접하기에 유용한 도구입니다.

- Synalyze It!: 전문가급 유료 헥스 인터프리터로, 시각적인 파일 분석을 돕기 위해 값에 색상 코드를 입혀 표시해 줍니다. 또한 방대한 '그래머(grammar)' 저장소를 내장하고 있습니다. 그래머는 알려진 파일 구조를 16진수 코드에 적용해 주는 틀로, 코드를 이해하고 검색하고 편집하는 데 큰 도움이 됩니다.

앱을 설치했다면 어떤 파일이든 열어 그 안에 담긴 이진 코드를 16진수 값 형태로 확인할 수 있습니다. 파일 종류에 따라 유용성에는 차이가 있겠지만, 대부분 화면 왼쪽에는 16진수 값이, 오른쪽에는 해당 값의 ASCII 해석이 함께 표시됩니다. 이를 통해 파일을 '읽어내며' 내부에서 무슨 일이 일어나는지 파악하기 시작할 수 있습니다.
헥스 에디터는 16진수 코드를 편집할 수도 있습니다. 다만 텍스트 편집만큼 간단하지 않으며, 그만큼 관대하지도 않습니다. 헥스 에디터는 바이트 단위의 짝으로 코드를 편집하며, 두 값을 동시에 덮어쓰고 교체합니다. 극도로 주의하지 않으면 정상적으로 작동하던 파일을 순식간에 손상시킬 수 있습니다. 이런 위험에 대비하려면 16진수 코드를 편집하기 전에 반드시 원본 파일을 복제해 두어야 합니다.
맺음말: 헥스 에디터는 어디에 쓰이는가?
무작위 파일을 헥스 에디터로 열어보는 것 자체는 재미있을 수 있지만, 큰 실용성은 없습니다. 헥스 에디터가 진가를 발휘하는 상황은 생각보다 좁습니다. 이진 코드를 직접 확인하고 편집해야 한다면, 헥스 에디터가 그 임무에 가장 적합한 도구입니다.
예를 들어 이진 데이터를 출력하는 프로그램을 작성할 때는 결과물 파일의 품질을 직접 검사하는 것이 좋습니다. 또한 손상된 서드파티 파일을 복구하거나 분석할 때도 유용합니다. 헥스 에디터는 손상되었거나 유효하지 않은 파일이라도 어떤 파일이든 열 수 있습니다. 따라서 때로는 헥스 에디터로 손상된 파일을 '고치거나', 최소한 오류의 원인이 무엇인지 파악할 수 있습니다. kext처럼 시스템 파일의 메모리 주소를 변경하는 등 정밀한 수정이 필요하다면 16진수 편집기만이 해답입니다. 이처럼 활용 범위가 넓은 만큼, 컴퓨팅과 프로그래밍의 세부 사항에 관심 있는 사람이라면 헥스 에디터 사용법을 미리 익혀두는 것이 큰 도움이 됩니다.