텍스트를 8진수로

8진수는 16진수의 잊혀진 사촌으로, 각 자리가 정확히 3비트를 나타내는 base-8 수 체계입니다. 유닉스 파일 권한(755, 644)은 8진수로 쓰이며, 모든 문자는 10진수와 16진수처럼 8진수 코드도 가집니다. 텍스트를 붙여넣으면 이 변환기가 각 바이트의 8진수 코드를 반환하고, 공백으로 구분된 8진수 코드를 붙여넣으면 원래 텍스트를 되돌립니다.

텍스트를 8진수로 변환하는 법

  1. 1

    텍스트 입력

    일반 문자; 비ASCII 입력은 UTF-8 인코딩을 가정합니다.

  2. 2

    각 바이트가 하나의 8진수 코드가 됨

    `A` = 10진수 65 = 8진수 `101`. `Z` = 90 = `132`. 공백 = 32 = `40`.

  3. 3

    코드는 공백으로 구분됨

    바이트 코드는 단일 공백으로 이어집니다(`Hi`는 `110 151`이 됩니다). 앞자리 0은 붙지 않습니다.

  4. 4

    8진수를 붙여넣어 디코딩

    8진수 → 텍스트로 전환한 뒤 공백으로 구분된 8진수 값을 붙여넣으세요. 0부터 255까지의 각 값이 하나의 바이트가 됩니다.

8진수 간단 예시

문자 10진수 8진수 2진수
A 65 101 1000001
a 97 141 1100001
0 48 60 0110000
공백 32 40 0100000
\n 10 12 0001010

8진수가 여전히 중요한 이유

대부분의 현대 시스템은 16진수 두 자리가 한 바이트와 깔끔하게 맞아떨어져 16진수를 선호합니다. 8진수는 몇 군데에 남아 있습니다:

  • 유닉스 파일 권한: chmod 755는 소유자 = 7(rwx), 그룹 = 5(r-x), 기타 = 5(r-x)를 뜻합니다. 각 자리는 세 개의 권한 비트입니다.
  • C/Python 이스케이프 시퀀스: 문자열 리터럴의 \101은 A입니다. C 정수 리터럴의 앞자리 0(int x = 0755)은 8진수로 해석되며, 잘 알려진 함정입니다.
  • 임베디드 및 레트로 시스템: 옛 12-, 18-, 36비트 아키텍처는 8진수와 잘 맞았습니다.
  • umask 값: umask 022는 기본 파일 권한 마스크를 755로 설정합니다.

파일 권한 표

8진수 자리 권한 2진수
0 --- 000
1 --x 001
2 -w- 010
3 -wx 011
4 r-- 100
5 r-x 101
6 rw- 110
7 rwx 111

그래서 chmod 644 = 소유자 rw-, 그룹 r--, 기타 r--, 읽기 가능한 텍스트 파일의 기본값입니다.

함정

  • C에서는 앞자리 0이 중요합니다. int a = 010;은 a를 10이 아니라 8로 설정합니다. Python 3는 이를 없앴으니 항상 0o10을 쓰세요.
  • 8진수는 0-7 자리만 사용합니다. 8과 9는 8진수에서 무효입니다. 보인다면 소스가 8진수가 아닙니다.
  • 유니코드 바이트는 8진수에서 더 커집니다. UTF-8 이모지(4바이트)는 세 자리 8진수 코드 4개, 열두 글자가 됩니다. 16진수라면 여덟 글자입니다. 대부분의 표시 용도에서는 16진수가 유리합니다.

자주 묻는 질문

유닉스 권한이나 \NNN 형식을 쓰는 C 문자열 이스케이프를 다루는 경우가 아니면 거의 안 씁니다. 16진수가 더 간결하고 바이트 단위로 읽기 쉽습니다.

각 8진수 자리가 세 개의 권한 비트(읽기, 쓰기, 실행)에 정확히 대응하기 때문입니다. 이 표기법은 1971년 AT&T 유닉스에 자리 잡아 지금까지 남아 있으며, 기저 비트 패턴에 우아하게 대응합니다.

네. 8진수 → 텍스트로 전환한 뒤 공백으로 구분된 8진수 값(예: 110 151)을 붙여넣으세요. 0부터 255까지의 각 값이 다시 하나의 바이트가 되므로, 멀티바이트 UTF-8 문자도 각 바이트 코드에서 디코딩됩니다.

입력한 텍스트는 변환을 수행하기 위해서만 저희 서버로 전송되며 저장하거나 기록하지 않습니다.

관련 도구

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