코딩/파이썬

python struct

zz! 2025. 9. 8. 12:50
728x90

python에서 정수, 문자열은 자유롭게 다룰 수 있다.

하지만, C언어 스타일의 바이트 단위 데이터(바이너리 데이터)를 다뤄야 할때 문제가 발생한다.

ex) 네트워크 패킷, 파일 포맷, 메모리 덤프 등등

이런 것들은 전부 바이트 스트림으로 표현이 된다.

ex)

import struct

# 정수 1024를 4바이트로 패킹
data = struct.pack("<I", 1024)
print(data)

# 다시 언패킹
value = struct.unpack("<I", data)[0]
print(value)

 

< 리틀 엔디언

> 빅 엔디언

! 네트워크 바이트 순서

@ 시스템 기본

= 시스템 기본 + 표준 크기

 

자료형 기호

b signed char

B unsigned char

h short

H unsigned short

i int

I unsigned int

q long long

Q unsigned long long

f float

d double

s char[]

p pascal string

 

여러 값을 패킹을 할 수 도 있다.

import struct

data = struct.pack("<IHH", 1024, 80, 443)
print(data)

value = struct.unpack("<IHH", data)
print(value)

<IHH = 리틀 엔디언으로 unsigned int, unsigned short, unsigned short

 

나머지는 다른 모르는 부분 있으면 추가하도록 하자

728x90