Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 struct 모듈 완벽 가이드: pack()과 unpack()으로 바이트 변환하기

이번 튜토리얼에서는 파이썬의 struct 모듈에 대해 자세히 알아보겠습니다.

struct 모듈이란?

struct 모듈은 파이썬의 기본(native) 데이터 타입을 바이트 문자열로 변환하거나, 그 반대로 바이트를 다시 파이썬 데이터 타입으로 되돌릴 때 사용하는 도구입니다. 별도로 설치할 필요가 없으며, 파이썬3에 기본으로 내장되어 있어 즉시 사용할 수 있습니다.

struct 모듈은 C 언어와 밀접한 관련이 있습니다. 따라서 이 모듈을 제대로 활용하려면 C 언어에서 각 데이터 타입을 표현하는 데 쓰이는 형식 문자(format character)를 먼저 이해해야 합니다. 주요 형식 문자는 아래와 같습니다.

데이터 타입형식 문자
inti
charc
strings
floatf

struct.pack(): 데이터를 바이트로 변환하기

struct.pack() 메서드는 파이썬 데이터 타입을 바이트로 변환하는 데 사용됩니다. 첫 번째 인자로 전달된 형식 문자열에 따라 여러 개의 인자를 받을 수 있습니다.

첫 번째 인자에는 위 표에서 확인한 형식 문자를 조합한 문자열을 전달하고, 그 뒤에 변환할 값들을 원하는 만큼 나열하면 됩니다. 예를 들면 다음과 같습니다.

  • struct.pack('14s i', b'Tutorialspoint', 2020) — 14바이트 크기의 문자열 하나와 정수 하나를 패킹
  • struct.pack('i i f 3s', 1, 2, 3.5, b'abc') — 정수 2개, 실수 1개, 3바이트 문자열을 패킹

예제

# struct 모듈 임포트
import struct
# 바이트로 변환
print(struct.pack('14s i', b'Tutorialspoint', 2020))
print(struct.pack('i i f 3s', 1, 2, 3.5, b'abc'))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

b'Tutorialspoint\x00\x00\xe4\x07\x00\x00'
b'\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00`@abc'

struct.unpack(): 바이트를 데이터로 되돌리기

struct.unpack() 메서드는 바이트를 다시 원래의 파이썬 데이터 타입으로 변환합니다. 이 메서드는 두 개의 인자를 받는데, 첫 번째는 pack() 메서드와 동일한 형식 문자열이고, 두 번째는 struct.pack() 메서드가 반환한 바이트 객체입니다.

struct.unpack()은 항상 결과를 튜플(tuple) 형태로 반환한다는 점에 유의하세요.

예제

# struct 모듈 임포트
import struct
# 바이트로 변환
converted_bytes = struct.pack('14s i', b'Tutorialspoint', 2020)
# 다시 파이썬 데이터 타입으로 변환
print(struct.unpack('14s i', converted_bytes))

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

(b'Tutorialspoint', 2020)

정리

지금까지 파이썬 struct 모듈을 사용해 데이터 타입과 바이트를 상호 변환하는 방법을 살펴봤습니다. 네트워크 통신, 파일 입출력, 이진 데이터 처리 등 저수준 데이터 작업을 할 때 struct 모듈은 매우 유용하게 활용됩니다. 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요.