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