본문 바로가기
목차
CE

Text File and Binary File: Hex Code

by ds31x 2025. 3. 11.
728x90
반응형

Text파일과 Binary 파일의 차이를 이해하기 위한 문서임:

  • Text 파일의 각 글자의 Encoding  (UTF-8)된 binary code를 Hexadecimal 형태로 살펴보고
  • Binary 파일의 0과 1의 표현을 JPEG 이미지 파일을 사용하여 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 File and Binary File

컴퓨터 파일은 데이터를 해석하는 방식에 따라 크게 텍스트 파일(Text File)과 이진 파일(Binary File)로 구분

  • 텍스트 파일 (Text File)
    • 사람이 읽을 수 있는 문자(문자열)로 구성되어 있으며,
    • 메모장이나 VS Code 같은 텍스트 에디터로 열어서 내용을 바로 확인할 수 있음.
    • 예시: .txt, .md, .json, .yaml, .py, .c 등.
  • 이진 파일 (Binary File)
    • 주로, 문자가 아닌 데이터(이미지, 소리, 실행 코드 등)가
    • 0과 1의 조합으로 저장되어 있음: 문자도 binary file로저장하는 경우엔 스타일 정보도 같이 포함되는 경우가 많음.
    • Binary File은 일반적으로 전용 프로그램이 있어야만 내용을 올바르게 해석할 수 있음.
    • 예시: .jpg, .mp3, .exe, .pdf, .zip 등.

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) 포맷

binary 파일은 다양한 format이 있으며 이는 사용되는 프로그램이 다름. 여기선 이미지 파일 중 JPEG 포맷 파일에 대해 살펴본다.

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를 다양한 이미지처리 라이브러리들이 제공해줌.

JFIF(JPEG File Interchange Format) 세그멘트 외의 촬영정보는 EXIF 데이터로 제공됨.

 

다음은 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 마커가 활성화되어 있음을 나타내는 플래그 값(pillow 내부에서 사용하는 값임)을 의미함.
  • jfif_unit의 경우, density에 대한 단위임: 0(단위없음) / 1(inch단위) / 2 (cm단위)
  • jfif_density는 jfif_unit 단위에 대해 pixel이 몇 개인지를 의미함.
  • 자세한 이미지 표준 정보를 몰라도 이미지 라이브러리의 도움으로 쉽게 확인할 수 있음.

같이보면 좋은 자료

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

https://ds31x.tistory.com/181

 

[python] Text mode vs. Binary mode: File open

Python에서 특정 파일을 open하는 경우, text mode 또는 binary mode 중 하나로 열게 된다.기본은 text mode임. 이 둘의 차이점은 간단히 설명하면,현재 open하고자 하는 file을 text파일로 처리할지아니면 binary

ds31x.tistory.com

https://dsaint31.me/mkdocs_site/OS/file/?h=file

 

BME

File 컴퓨터를 사용하기 위해 필요한 정보들이 담김. 컴퓨터에서 사용되는 data 저장의 기본단위 파일 이름의 extension(확장명 or 확장자) 파일에 포함된 정보의 종류 및 해당 파일을 열기 위한 연결

dsaint31.me

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


 

 

728x90

'CE' 카테고리의 다른 글

[C] LLP64 vs. LP64  (0) 2025.03.21
[Py] bytecode 분석 - dis 모듈  (0) 2025.03.11
Apple II (1977년, Apple ][ )  (0) 2025.03.11
Switch로 컴퓨터(or 디지털논리회로) 만들기 - Claude Shannon (1937)  (0) 2025.03.11
Claude Shannon  (0) 2025.03.11