Python:struct
패킹 된 바이너리 데이터로 바이트열을 해석
바이트 순서, 크기 및 정렬
기본적으로 C 유형은 시스템의 기본 형식과 바이트 순서로 표시되며 필요한 경우 (C 컴파일러에서 사용하는 규칙에 따라) 패드 바이트를 건너뛰어 적절하게 정렬됩니다. 이 동작은 압축된 구조체의 바이트가 해당 C 구조체의 메모리 레이아웃과 정확히 일치하도록 선택됩니다. 기본 바이트 순서 및 패딩을 사용할지 또는 표준 형식을 사용할지는 애플리케이션에 따라 다릅니다.
또는, 다음 표에 따라, 포맷 문자열의 첫 번째 문자를 사용하여 패킹 된 데이터의 바이트 순서, 크기 및 정렬을 표시할 수 있습니다:
|   문자  |    바이트 순서  |    크기  |    정렬  |  
|      |    네이티브  |    네이티브  |    네이티브  |  
|      |    네이티브  |    표준  |    none  |  
|      |    리틀 엔디안  |    표준  |    none  |  
|      |    빅 엔디안  |    표준  |    none  |  
|      |    네트워크 (= 빅 엔디안)  |    표준  |    none  |  
 첫 번째 문자가 이들 중 하나가 아니면, '@'로 가정합니다. 
포맷 문자
포맷 문자는 다음과 같은 의미가 있습니다; C와 파이썬 값 사이의 변환은 형을 주면 분명해야 합니다. ‘표준 크기’ 열은 표준 크기를 사용할 때 패킹 된 값의 크기를 바이트 단위로 나타냅니다; 즉, 포맷 문자열이 '<', '>', '!' 또는 '=' 중 하나로 시작하는 경우입니다. 네이티브 크기를 사용할 때, 패킹 된 값의 크기는 플랫폼에 따라 다릅니다.
|   포맷  |    C형  |    파이썬 형  |    표준 크기  |    노트  |  
|      |    패드 바이트  |    값이 없습니다  |    -  |    (7)  |  
|      |    char  |    길이가 1인 bytes  |    1  |    -  |  
|      |    signed char  |    정수  |    1  |    (1), (2)  |  
|      |    unsigned char  |    정수  |    1  |    (2)  |  
|      |    _Bool  |    bool  |    1  |    (1)  |  
|      |    short  |    정수  |    2  |    (2)  |  
|      |    unsigned short  |    정수  |    2  |    (2)  |  
|      |    int  |    정수  |    4  |    (2)  |  
|      |    unsigned int  |    정수  |    4  |    (2)  |  
|      |    long  |    정수  |    4  |    (2)  |  
|      |    unsigned long  |    정수  |    4  |    (2)  |  
|      |    long long  |    정수  |    8  |    (2)  |  
|      |    unsigned long long  |    정수  |    8  |    (2)  |  
|      |    ssize_t  |    정수  |    -  |    (3)  |  
|      |    size_t  |    정수  |    -  |    (3)  |  
|      |    (6)  |    float  |    2  |    (4)  |  
|      |    float  |    float  |    4  |    (4)  |  
|      |    double  |    float  |    8  |    (4)  |  
|      |    char[]  |    bytes  |    -  |    (9)  |  
|      |    char[]  |    bytes  |    -  |    (8)  |  
|      |    void*  |    정수  |    -  |    (5)  |  
Integer를 Bytes로 직렬화
- 내장형 — Python 3.12.4 문서 # int.to_bytes
 - struct — Interpret bytes as packed binary data — Python 3.12.4 문서 # examples
 
data = 9999
serialized_data = data.to_bytes(4, "big", signed=False)
print(serialized_data.hex())  ## 0000270f
result = int.from_bytes(serialized_data, "big", signed=False)
print(result)  ## 9999
위 코드를 Python:struct 을 사용한 방식으로 변환하면:
from struct import calcsize, pack, unpack
data = 9999
serialized_data = pack('>I', data)
print(serialized_data.hex())  ## 0000270f
unpacked_data = unpack('>I', serialized_data)
assert isinstance(unpacked_data, tuple)
assert len(unpacked_data) == 1
result = unpacked_data[0]
print(result)  ## 9999
print(calcsize('>I'))  ## 4