본문 바로가기
CE

Text File and Binary File: Hex Code

by ds31x 2025. 3. 11.

Text 파일의 각 글자의 Encoding 된 binary code를 Hexadecimal 형태로 살펴본 예제임.

이를 살펴보기 위해 VSCode에 HEX Editor Extension을 설치하여 살펴봄.

 

UTF-8에 대한 자세한 내용은 다음을 참고:
https://dsaint31.me/mkdocs_site/CE/ch01/code_for_character/?h=ascii#utf-8-universal-coded-character-set-transformation-format-8-bit

 

BME

Codes for Characters Code 란 특정 형태의 information을 다른 방법으로 표현하는 규칙 또는 해당 규칙으로 표현된 결과물 을 가르킴. 문자를 나타내기 위한 code는 인간이 사용하는 문자 를 일종의 기호 또

dsaint31.me


TEXT 파일

UTF-8 encoding 방식이 현재 가장 많이 쓰이는 한글을 위한 encoding 중 하나임.

(multilingual document에선 거의 UTF-8이 사용됨.)

 

3바이트로 표현되며 이를 hex code로는 0x ED 95 9C 임.


11바이트로 표현되며 이를 hex code로는 0x 31 임. (알파벳과 숫자는 ASCII와 호환됨)


a1바이트로 표현되며 이를 hex code로는 0x 61 임. (역시 ASCII와 호환됨)


Binary File: JPEG (.jpg) 포맷

JPEG 파일을 열어서 바이너리 데이터를 확인해보면, 파일의 시작 부분에 다음과 같은 마커와 정보를 볼 수 있음:

  1. SOI(Start of Image) 마커 - 0xFF, 0xD8로 시작
  2. APP0(Application Marker 0) - 대개 0xFF, 0xE0 로 시작하고, 이 다음의 2바이트를 통해 세그먼트 길이를 나타냄.
    • 위의 예에서는 0x00, 0x10 이 segment length이며, 16바이트를 의미함.
    • 즉 APP0 segment의 총 길이는 16바이트 - 길이 2바이트를 제외하면 14바이트임 (길이제외).
    • 길이 이후에 "JFIF"문자열과 null문자 이 놓임: JPEG File Interchange Format 
      1. "JFIF" 문자열 - ASCII로 "JFIF"를 나타내는 바이트 시퀀스 (0x4A, 0x46, 0x49, 0x46, 0x00)
        • 0x00 코드의 null문자로 끝남.
      2.  JFIF 버전 번호
        • 0x01, 0x01 : JFIF버전이 1.1임을 의미.
      3.  단위,
        • 0x01 : 0x01은 단위가 dpi (dots per pixel)임을 표시
      4.   해상도
        • 0x00, 0x60, 0x00, 0x60 : 0x60은 96으로 가로세로 해상도가 96dpi임을 의미.
      5.  Thumbnail (축소판) 정보
        • 0x00, 0x00 : 가로, 세로 크기 0으로 축소판이 없음을 의미 
  3. DQT (Define Quantization Table) 마커 - 0xFF, 0xDB 로 시작하며 양자화 테이블 정의 시작됨.
    1. 길이: 위의 예에서 0x00, 0x43 으로 67바이트임을 의미.
    2. 이후 DQT테이블 정보임.

위와 같은 정보를 쉽게 파악할 수 있는 parser를 다양한 이미지처리 라이브러리들이 제공해줌.

다음은 Pillow를 이용하는 방식임.

In [2]: from PIL import Image
   ...: from PIL.ExifTags import TAGS
   ...: 
   ...: image = Image.open('../ch00/img/Classic_shot_of_the_ENIAC.jpg')
   ...: info = image.info  # JFIF 정보 등 기본 메타데이터
   ...: exif_data = image._getexif()  # EXIF 데이터 (있는 경우)

In [3]: info
Out[3]: 
{'jfif': 257,
 'jfif_version': (1, 1),
 'dpi': (96, 96),
 'jfif_unit': 1,
 'jfif_density': (96, 96)}

In [4]: exif_data

In [5]:
  • `jfif`가 257이라는 것은 JFIF 마커가 활성화되어 있음을 나타내는 플래그 값을 의미함.
  • 자세한 이미지 표준 정보를 몰라도 이미지 라이브러리의 도움으로 쉽게 확인할 수 있음.

같이보면 좋은 자료

2024.01.07 - [개발환경] - [CE] Text file: Text 파일이란?

 

[CE] Text file: Text 파일이란?

"text file" 은사람과 컴퓨터가 읽을 수 있고 처리할 수 있도록 encoding 된 characters 로 이루어진electric text lines 로 구성되는 형태의파일 포맷 및 해당 파일을 가르킴.https://dsaint31.me/mkdocs_site/CE/ch01/code_

ds31x.tistory.com

2024.06.03 - [Python] - [Python] PIL, Pillow, OpenCV, and Scikit-image

 

[Python] PIL, Pillow, OpenCV, and Scikit-image

PIL, Pillow, OpenCV, and Scikit-imagePython에서 이미지를 다룰 때 이용되는 주요 패키지들은 다음과 같음.1.PIL (Python Imaging Library)PIL은 1995년에 처음 개발된 Python의 최초 이미지 처리 라이브러리 중 하나

ds31x.tistory.com