반응형
struct
패키지는 Python에서 바이너리 데이터를 다루기 위해 사용되는 모듈로, C 언어나 기타 저수준 언어에서 흔히 사용하는 구조체(structure)와 비슷한 방식으로 데이터를 해석하거나 생성할 수 있게 해줍니다. 이 모듈은 데이터의 포맷을 지정하고, 이를 바탕으로 바이트(byte) 데이터로 변환하거나 바이트 데이터를 언패킹(unpacking)하여 원하는 타입으로 변환하는 기능을 제공합니다.
주요 기능
- 패킹(Packing): 파이썬의 기본 자료형들을 바이너리 데이터로 변환합니다.
- 언패킹(Unpacking): 바이너리 데이터를 파이썬의 기본 자료형으로 변환합니다.
struct
모듈의 주요 함수들
struct.pack(format, v1, v2, ...)
: 주어진 포맷(format) 문자열에 따라 값을 패킹하여 바이트 객체로 반환합니다.
import struct
# 예: 정수 3개를 'h' (short, 2바이트)로 패킹
packed_data = struct.pack('hhh', 1, 2, 3)
print(packed_data) # b'\x01\x00\x02\x00\x03\x00'
struct.unpack(format, buffer)
: 주어진 포맷 문자열에 따라 바이트 데이터를 언패킹하여 튜플로 반환합니다.
import struct
# 예: 위에서 패킹한 데이터를 언패킹
unpacked_data = struct.unpack('hhh', packed_data)
print(unpacked_data) # (1, 2, 3)
struct.calcsize(format)
: 주어진 포맷 문자열에 따라 필요한 바이트의 크기를 반환합니다.
import struct
# 예: 'hhh' 포맷의 크기 계산
size = struct.calcsize('hhh')
print(size) # 6
struct.pack_into(format, buffer, offset, v1, v2, ...)
: 주어진 포맷에 따라 패킹한 데이터를 지정한 버퍼의 오프셋 위치에 저장합니다.
import struct
import bytearray
# 빈 바이트 배열 생성
buffer = bytearray(10)
# 'hh' 포맷으로 두 개의 정수(1, 2)를 버퍼의 시작 위치에 패킹
struct.pack_into('hh', buffer, 0, 1, 2)
print(buffer) # bytearray(b'\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00')
struct.unpack_from(format, buffer, offset=0)
: 주어진 포맷에 따라 버퍼의 지정된 오프셋 위치에서 데이터를 언패킹합니다.
import struct
# 위에서 사용한 buffer에서 데이터 언패킹
unpacked_from_buffer = struct.unpack_from('hh', buffer, 0)
print(unpacked_from_buffer) # (1, 2)
포맷 문자열
포맷 문자열은 패킹 및 언패킹할 데이터의 타입과 순서를 지정합니다. 주요 포맷 문자는 다음과 같습니다:
c
: 문자 (1 바이트)b
: 부호 있는 정수 (1 바이트)B
: 부호 없는 정수 (1 바이트)h
: 부호 있는 정수 (2 바이트)H
: 부호 없는 정수 (2 바이트)i
: 부호 있는 정수 (4 바이트)I
: 부호 없는 정수 (4 바이트)f
: 부동 소수점 수 (4 바이트)d
: 부동 소수점 수 (8 바이트)
예제
다음은 struct
모듈을 사용하여 데이터 패킹 및 언패킹을 하는 간단한 예제입니다.
import struct
# 포맷 문자열: 'I'는 부호 없는 4바이트 정수, 'f'는 4바이트 실수
format_string = 'If'
data = (1234, 2.345)
# 데이터 패킹
packed_data = struct.pack(format_string, *data)
print(f"Packed Data: {packed_data}")
# 데이터 언패킹
unpacked_data = struct.unpack(format_string, packed_data)
print(f"Unpacked Data: {unpacked_data}")
이 코드는 정수와 실수를 바이너리 데이터로 패킹하고, 이를 다시 언패킹하여 원래의 데이터로 복원하는 과정을 보여줍니다.
struct
모듈은 특히 네트워크 프로토콜 구현이나 파일 포맷 파싱과 같은 저수준 바이너리 데이터 처리가 필요한 작업에서 유용하게 사용됩니다.
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] pickle를 사용하여 데이터를 읽고 쓰기 (0) | 2024.08.13 |
---|---|
[ Python ] struct를 사용해서 little/big endian으로 파일 읽고 쓰기 (0) | 2024.08.13 |
[ Python ] 파일 읽고 쓰기 함수 설명과 예제 (0) | 2024.08.07 |
[ Python ] with로 파일 자원 관리 하면서 파일 읽기 (0) | 2024.08.07 |
[ Python ] re.Scanner를 이용해서 RPN 계산기 만들기 (0) | 2024.08.02 |