struct — 패킹 된 바이너리 데이터로 바이트열을 해석¶
소스 코드: Lib/struct.py
이 모듈은 파이썬 값과 파이썬 bytes 객체로 표현되는 C 구조체 사이의 변환을 수행합니다. 간결한 포맷 문자열 이 파이썬 값과의 변환 의도를 설명합니다. 이 모듈의 함수와 객체는 외부 소스(파일 또는 네트워크 연결)와의 데이터 교환이나, 파이썬 애플리케이션과 C 레이어 사이의 데이터 전송이라는 두 가지 주요 용도로 사용될 수 있습니다.
참고
접두사 문자가 제공되지 않으면 기본값은 네이티브 모드입니다. 이 모드는 Python 인터프리터가 빌드된 플랫폼과 컴파일러를 기준으로 데이터를 패킹하거나 언패킹합니다. 특정 C 구조체를 패킹한 결과에는 관련 C 타입의 적절한 정렬(alignment)을 유지하기 위한 패드 바이트가 포함되며, 이와 마찬가지로 언패킹 시에도 정렬이 고려됩니다. 반대로, 외부 소스 간에 데이터를 통신할 때는 프로그램 작성자가 요소 사이의 바이트 순서와 패딩을 정의할 책임이 있습니다. 자세한 내용은 바이트 순서, 크기 및 정렬 를 참조하십시오.
여러 struct 함수(및 Struct 의 메서드)는 버퍼 인자를 취합니다. 이는 버퍼 프로토콜 를 구현하고 읽기 가능하거나 읽기/쓰기 가능한 버퍼를 제공하는 객체를 의미합니다. 이 목적으로 가장 흔히 사용되는 타입은 bytes 와 bytearray 이지만, 바이트 배열로 볼 수 있는 다른 많은 타입들도 버퍼 프로토콜을 구현하므로 bytes 객체로부터 추가적인 복사 없이도 읽거나 채울 수 있습니다.
함수와 예외¶
이 모듈은 다음과 같은 예외와 함수를 정의합니다:
- exception struct.error¶
여러 상황에서 발생하는 예외; 인자는 무엇이 잘못되었는지 설명하는 문자열입니다.
- struct.pack(format, v1, v2, ...)¶
v1, v2, … 값을 포함하고 포맷 문자열 format에 따라 패킹 된 바이트열 객체를 반환합니다. 인자는 포맷이 요구하는 값과 정확히 일치해야 합니다.
- struct.pack_into(format, buffer, offset, v1, v2, ...)¶
포맷 문자열 format에 따라 값 v1, v2, … 를 패킹하고 패킹 된 바이트열을 쓰기 가능한 버퍼 buffer에 offset 위치에서부터 씁니다. offset은 필수 인자임에 유의하십시오.
- struct.unpack(format, buffer)¶
포맷 문자열 format에 따라 버퍼 buffer(아마도
pack(format, ...)으로 패킹 된)에서 언 패킹 합니다. 정확히 하나의 항목을 포함하더라도 결과는 튜플입니다. 바이트 단위의 버퍼 크기는 (calcsize()에 의해 반영되는) 포맷이 요구하는 크기와 일치해야 합니다.
- struct.unpack_from(format, /, buffer, offset=0)¶
포맷 문자열 format에 따라, offset 위치에서 시작하여 buffer에서 언 패킹 합니다. 정확히 하나의 항목을 포함하더라도 결과는 튜플입니다. offset 위치에서 시작하여 바이트 단위로 측정한 버퍼 크기는 (
calcsize()에 의해 반영되는) 포맷이 요구하는 크기 이상이어야 합니다.
- struct.iter_unpack(format, buffer)¶
포맷 문자열 format에 따라 버퍼 buffer에서 이터레이션을 통해 언 패킹 합니다. 이 함수는 모든 내용이 소비될 때까지 버퍼에서 같은 크기의 청크를 읽는 이터레이터를 반환합니다. 바이트 단위의 버퍼 크기는 (
calcsize()에 의해 반영되는) 포맷이 요구하는 크기의 배수여야 합니다.각 이터레이션은 포맷 문자열에 지정된 대로 튜플을 산출합니다.
Added in version 3.4.
- struct.calcsize(format)¶
포맷 문자열 format에 해당하는 구조체(
pack(format, ...)에 의해 생성되는 바이트열 객체)의 크기를 반환합니다.
포맷 문자열¶
포맷 문자열은 데이터를 패킹하고 언패킹할 때의 데이터 레이아웃을 설명합니다. 이들은 패킹/언패킹되는 데이터의 타입을 지정하는 type codes 로 구성됩니다. 또한, 특수 문자가 byte order, size and alignment 를 제어합니다. 각 포맷 문자열은 데이터의 전반적인 속성을 설명하는 선택적 접두사 문자와 실제 데이터 값 및 패딩을 설명하는 하나 이상의 포맷 문자로 구성됩니다.
바이트 순서, 크기 및 정렬¶
기본적으로, C형은 기계의 네이티브 형식과 바이트 순서로 표현되며, 필요하면 (C 컴파일러에서 사용하는 규칙에 따라) 패드 바이트로 건너뛰어 적절하게 정렬됩니다. 이 동작은 패킹된 구조체의 바이트가 해당 C 구조체의 메모리 배치와 정확히 일치하도록 선택되었습니다. 네이티브 바이트 순서와 패딩을 사용할지 아니면 표준 포맷을 사용할지는 응용 프로그램에 달려 있습니다.
또는, 다음 표에 따라, 포맷 문자열의 첫 번째 문자를 사용하여 패킹 된 데이터의 바이트 순서, 크기 및 정렬을 표시할 수 있습니다:
문자 |
바이트 순서 |
크기 |
정렬 |
|---|---|---|---|
|
네이티브 |
네이티브 |
네이티브 |
|
네이티브 |
표준 |
none |
|
리틀 엔디안 |
표준 |
none |
|
빅 엔디안 |
표준 |
none |
|
네트워크 (= 빅 엔디안) |
표준 |
none |
첫 번째 문자가 이들 중 하나가 아니면, '@'로 가정합니다.
참고
숫자 1023(16진수로 0x3ff)은 다음과 같은 바이트 표현을 가집니다.
빅 엔디안(
>)에서03 ff리틀 엔디안(
<)에서ff 03
파이썬 예제:
>>> import struct
>>> struct.pack('>h', 1023)
b'\x03\xff'
>>> struct.pack('<h', 1023)
b'\xff\x03'
네이티브 바이트 순서는 호스트 시스템에 따라 빅 엔디안이나 리틀 엔디안입니다. 예를 들어, 인텔 x86, AMD64 (x86-64) 및 애플 M1은 리틀 엔디안입니다; IBM z 와 많은 레거시 아키텍처는 빅 엔디안입니다. 시스템의 엔디안을 확인하려면 sys.byteorder를 사용하십시오.
네이티브 크기와 정렬은 C 컴파일러의 sizeof 표현식을 사용하여 결정됩니다. 이것은 항상 네이티브 바이트 순서와 결합합니다.
표준 크기는 타입 코드에만 의존합니다. 타입 코드 섹션의 표를 참조하십시오.
'@'과 '='의 차이점에 유의하십시오; 둘 다 네이티브 바이트 순서를 사용하지만, 후자는 크기와 정렬이 표준화됩니다.
'!' 형식은 IETF RFC 1700에 정의된 대로 항상 빅 엔디안인 네트워크 바이트 순서를 나타냅니다.
네이티브가 아닌 바이트 순서(강제 바이트 스와핑)를 표시하는 방법은 없습니다; '<'나 '>'를 적절히 선택하십시오.
노트:
패딩은 연속되는 구조체 멤버 간에만 자동으로 추가됩니다. 인코딩된 구조체의 시작이나 끝에는 패딩이 추가되지 않습니다.
네이티브가 아닌 크기와 정렬을 사용할 때는 패딩이 추가되지 않습니다, 예를 들어 ‘<’, ‘>’, ‘=’ 및 ‘!’ 에서.
구조체의 끝을 특정 형의 정렬 요구 사항에 맞추려면, 반복 횟수가 0인 해당 형의 코드로 포맷을 끝내십시오. 예를 참조하십시오.
타입 코드¶
타입 코드(또는 포맷 코드)는 다음과 같은 의미를 가집니다. C와 Python 값 사이의 변환은 해당 타입이 주어지면 명확해야 합니다. ‘Standard size’ 열은 표준 크기를 사용할 때 패킹된 값의 바이트 수를 나타내며, 이는 포맷 문자열이 '<', '>', '!' 또는 '=' 중 하나로 시작하는 경우를 말합니다. 네이티브 크기를 사용할 때, 패킹된 값의 크기는 플랫폼에 따라 다릅니다.
포맷 |
C형 |
파이썬 형 |
표준 크기 |
노트 |
|---|---|---|---|---|
|
패드 바이트 |
값이 없습니다 |
(7) |
|
|
char |
길이가 1인 bytes |
1 |
|
|
signed char |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
1 |
(2) |
|
unsigned char |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
1 |
(2) |
|
_Bool |
bool |
1 |
(1) |
|
short |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
2 |
(2) |
|
unsigned short |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
2 |
(2) |
|
int |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
4 |
(2) |
|
unsigned int |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
4 |
(2) |
|
long |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
4 |
(2) |
|
unsigned long |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
4 |
(2) |
|
long long |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
8 |
(2) |
|
unsigned long long |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
8 |
(2) |
|
|
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
(2), (3) |
|
|
|
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
(2), (3) |
|
|
_Float16 |
float |
2 |
(4), (6) |
|
float |
float |
4 |
(4) |
|
double |
float |
8 |
(4) |
|
float complex |
complex |
8 |
(10) |
|
double complex |
complex |
16 |
(10) |
|
char[] |
bytes |
(9) |
|
|
char[] |
bytes |
(8) |
|
|
void* |
int 자료형은 정수 값을 표현하며, 크기 예측에 사용됩니다. |
(2), (5) |
버전 3.3에서 변경: 'n'과 'N' 포맷에 대한 지원이 추가되었습니다.
버전 3.6에서 변경: 'e' 포맷에 대한 지원이 추가되었습니다.
버전 3.14에서 변경: 'F' 및 'D' 포맷에 대한 지원이 추가되었습니다.
버전 3.15에서 변경: 'Zf' 및 'Zd' 포맷에 대한 지원이 추가되었습니다.
버전 3.16에서 변경: 'F' 및 'D' 형식은 폐지되었습니다.
더 보기
array 및 ctypes 모듈과 numpy <https://numpy.org/doc/stable/reference/arrays.interface.html#object.__array_interface__>`__ 와 같은 서드파티 모듈은 유사하지만 약간 다른 타입 코드를 사용합니다.
노트:
'?'변환 코드는 C99 이후의 C 표준이 정의한 _Bool 형에 해당합니다. 표준 모드에서는, 1바이트로 표현됩니다.정수 변환 코드 중 하나를 사용하여 정수가 아닌 값을 패킹하려고 할 때, 정수가 아닌 값에
__index__()메서드가 있으면 패킹 전에 해당 메서드가 호출되어 인자를 정수로 변환합니다.버전 3.2에서 변경: 정수가 아닌 값에서
__index__()메서드를 사용하는 것을 추가했습니다.'n'과'N'변환 코드는 (기본값이나'@'바이트 순서 문자로 선택된) 네이티브 크기에만 사용할 수 있습니다. 표준 크기의 경우, 응용 프로그램에 맞는 다른 정수 포맷을 사용할 수 있습니다.'f','d'및'e'변환 코드의 경우, 패킹 된 표현은 플랫폼에서 사용하는 부동 소수점 형식과 관계없이 IEEE 754 binary32, binary64 또는 binary16 형식을 사용합니다 (각각'f','d'또는'e').'P'타입 코드는 네이티브 바이트 순서(기본값으로 선택되거나'@'바이트 순서 문자를 사용하는 경우)에서만 사용할 수 있습니다. 바이트 순서 문자'='``는 호스트 시스템에 따라 리틀 또는 빅 엔디안 순서를 사용하도록 선택합니다. struct 모듈은 이를 네이티브 순서로 해석하지 않으므로 ``'P'형식은 사용할 수 없습니다.IEEE 754 binary16 “반 정밀도(half precision)” 타입은 IEEE 754 표준 의 2008년 개정판에서 도입되었습니다. 부호 비트, 5비트 지수 및 11비트 정밀도(그중 10비트는 명시적으로 저장됨)를 가지며, 전체 정밀도로 약
6.1e-05에서6.5e+04사이의 숫자를 표현할 수 있습니다. 이 타입은 C 컴파일러에서 널리 지원되지 않습니다. C23 표준의 Annex H를 지원하는 컴파일러인 경우에만 _Float16 타입으로 사용할 수 있습니다. 일반적인 기계에서는 unsigned short를 저장용으로 사용할 수 있지만, 수학 연산에는 사용할 수 없습니다. 자세한 내용은 half-precision floating-point format_ 의 Wikipedia 페이지를 참조하십시오.패킹 시
'x'는 하나의 NUL 바이트를 삽입합니다.'p'타입 코드는 “파스칼 문자열(Pascal string)”을 인코딩하며, 이는 카운트에 의해 주어진 고정된 바이트 수 에 저장되는 짧은 가변 길이 문자열을 의미합니다. 저장되는 첫 번째 바이트는 문자열의 길이나 255 중 더 작은 값입니다. 그 뒤로 문자열의 바이트들이 이어집니다.pack()에 전달된 바이트 문자열이 너무 길 경우(count-1보다 긴 경우), 문자열의 선행count-1바이트만 저장됩니다. 바이트 문자열이count-1보다 짧으면, 정확히 count 바이트가 사용되도록 널 바이트로 채워집니다.unpack()의 경우'p'타입 코드는count바이트를 소비하지만, 반환되는bytes객체는 절대로 255바이트를 초과할 수 없음에 유의하십시오. 패킹 시에는bytes및bytearray타입의 인자가 허용됩니다.'s'타입 코드의 경우, 카운트는 다른 타입 코드와 같은 반복 횟수가 아니라 바이트 문자열의 길이로 해석됩니다. 예를 들어,'10s'는 단일 파이썬 바이트 문자열과 매핑되는 단일 10바이트 문자열을 의미하고,'10c'는 10개의 서로 다른 파이썬 바이트 객체와 매핑되는 10개의 개별한 1바이트 문자 요소(예:cccccccccc)를 의미합니다. (차이에 대한 구체적인 시연은 예 를 참조하십시오.) 카운트가 제공되지 않으면 기본값은 1입니다. 패킹 시, 바이트 문자열은 적절하게 맞도록 잘리거나 널 바이트로 채워집니다. 언패킹 시, 결과로 나오는bytes객체는 항상 정확히 지정된 수의 바이트를 가집니다. 특별한 경우로,'0s'는 단일의 빈 바이트 문자열을 의미합니다(반면'0c'는 0문자를 의미함). 패킹 시에는bytes및bytearray타입의 인자가 허용됩니다.'Zf'및'Zd'타입 코드의 경우, 패킹된 표현은 플랫폼에서 사용하는 부동 소수점 형식과 관계없이 복소수 성분에 대해 IEEE 754 binary32 및 binary64 형식을 사용합니다. C에서 복소수 타입이 선택적 기능임에도 불구하고 파이썬에서는 복소수 타입이 무조건적으로 사용할 수 있음에 유의하십시오. C11 표준에 명시된 바와 같이, 각 복소수 타입은 실수부와 허수부를 각각 포함하는 두 개의 요소를 가진 C 배열로 표현됩니다. 호환성을 위해'F'및'D'(각각'Zf'및'Zd'를 위한) 포맷 문자가 지원됩니다.
타입 코드 앞에 정수 반복 횟수가 올 수 있습니다. 예를 들어, 포맷 문자열 '4h' 는 'hhhh' 와 정확히 동일한 의미를 가집니다.
포맷 사이의 공백 문자는 무시됩니다; 횟수와 형식 사이에는 공백이 없어야 합니다.
정수 형식 ('b', 'B', 'h', 'H', 'i', 'I', 'l', 'L', 'q', 'Q') 중 하나를 사용하여 값 x를 패킹할 때, x가 해당 포맷의 유효한 범위를 벗어나면 struct.error가 발생합니다.
버전 3.1에서 변경: 이전에는, 일부 정수 포맷은 범위를 벗어난 값을 래핑하고 struct.error 대신 DeprecationWarning을 발생시켰습니다.
For the '?' type code, the return value is either True or
False. When packing, the truth value of the argument object is used.
Either 0 or 1 in the native or standard bool representation will be packed, and
any non-zero value will be True when unpacking.
예¶
참고
네이티브 바이트 순서 예시('@' 포맷 접두사 또는 접두사 문자가 없는 경우)는 플랫폼과 컴파일러에 따라 달라지므로 읽는 기계가 생성하는 결과와 일치하지 않을 수 있습니다.
빅 엔디안 순서를 사용하여 세 가지 다른 크기의 정수를 패킹하고 언패킹합니다:
>>> from struct import *
>>> pack(">bhl", 1, 2, 3)
b'\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('>bhl')
7
정의된 필드에 너무 큰 정수를 패킹하려고 시도합니다:
>>> pack(">h", 99999)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: 'h' format requires -32768 <= number <= 32767
's'``와 ``'c' 포맷 문자의 차이점을 보여줍니다:
>>> pack("@ccc", b'1', b'2', b'3')
b'123'
>>> pack("@3s", b'123')
b'123'
언 패킹 된 필드는 변수에 대입하거나 결과를 네임드 튜플로 감싸서 이름을 붙일 수 있습니다:
>>> record = b'raymond \x32\x12\x08\x01\x08'
>>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)
>>> from collections import namedtuple
>>> Student = namedtuple('Student', 'name serialnum school gradelevel')
>>> Student._make(unpack('<10sHHb', record))
Student(name=b'raymond ', serialnum=4658, school=264, gradelevel=8)
네이티브 모드에서는 패딩이 암시적이므로 타입 코드의 순서가 크기에 영향을 미칠 수 있습니다. 표준 모드에서는 사용자가 원하는 패딩을 삽입할 책임이 있습니다. 아래 첫 번째 pack 호출에서, 뒤따르는 정수를 4바이트 경계에 맞추기 위해 패킹된 '#' 뒤에 세 개의 NUL 바이트가 추가되었음에 유의하십시오. 이 예제는 리틀 엔디안 기계에서 생성되었습니다:
>>> pack('@ci', b'#', 0x12131415)
b'#\x00\x00\x00\x15\x14\x13\x12'
>>> pack('@ic', 0x12131415, b'#')
b'\x15\x14\x13\x12#'
>>> calcsize('@ci')
8
>>> calcsize('@ic')
5
다음 포맷 'llh0l'는 플랫폼의 long이 4바이트 경계에 정렬된다고 가정할 때 끝에 2개의 패드 바이트를 추가합니다:
>>> pack('@llh0l', 1, 2, 3)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
응용¶
struct 모듈에는 두 가지 주요 용도가 있습니다. 하나는 동일한 컴파일러를 사용하여 빌드된 애플리케이션 내의 Python과 C 코드 간 데이터 교환(native formats), 다른 하나는 합의된 데이터 레이아웃을 사용하는 애플리케이션 간의 데이터 교환입니다(standard formats). 일반적으로 이 두 영역을 위해 구성되는 포맷 문자열은 서로 다릅니다.
네이티브 포맷¶
네이티브 레이아웃을 모방하는 포맷 문자열을 구성할 때, 컴파일러와 기계 아키텍처가 바이트 순서와 패딩을 결정합니다. 이러한 경우 네이티브 바이트 순서와 데이터 크기를 지정하기 위해 @ 포맷 문자를 사용해야 합니다. 내부 패드 바이트는 보통 자동으로 삽입됩니다. 연속된 데이터 청크의 적절한 정렬을 위해 올바른 바이트 경계로 올림 처리하는 과정에서, 포맷 문자열 끝에 0회 반복 타입 코드가 필요할 수도 있습니다.
다음 두 가지 간단한 예시를 고려하십시오(64비트 리틀 엔디안 기계):
>>> calcsize('@lhl')
24
>>> calcsize('@llh')
18
추가 패딩을 사용하지 않으면 두 번째 포맷 문자열 끝에서 데이터가 8바이트 경계로 정렬되지 않습니다. 0회 반복 포맷 코드로 이 문제를 해결할 수 있습니다:
>>> calcsize('@llh0l')
24
'x' 타입 코드를 사용하여 반복을 지정할 수 있지만, 네이티브 형식의 경우 '0l' 과 같은 0회 반복 형식을 사용하는 것이 더 좋습니다.
기본적으로 네이티브 바이트 순서와 정렬이 사용되지만, 명시적으로 @ 접두사 문자를 사용하는 것이 좋습니다.
표준 포맷¶
네트워킹이나 저장을 포함하여 프로세스 외부와 데이터를 교환할 때는 정밀해야 합니다. 정확한 바이트 순서, 크기 및 정렬을 지정하십시오. 특정 기계의 네이티브 순서와 일치한다고 가정하지 마십시오. 예를 들어, 네트워크 바이트 순서는 빅 엔디안이지만 많은 대중적인 CPU는 리틀 엔디안입니다. 이를 명시적으로 정의함으로써 사용자는 코드가 실행되는 플랫폼의 세부 사항을 신경 쓸 필요가 없습니다. 첫 번째 문자는 일반적으로 < 또는 >``(또는 ``!)여야 합니다. 패딩은 프로그래머의 책임입니다. 0회 반복 포맷 문자는 작동하지 않으므로, 대신 필요한 곳에 'x' 패드 바이트를 명시적으로 추가해야 합니다. 이전 섹션의 예제들을 다시 살펴보면 다음과 같습니다:
>>> calcsize('<qh6xq')
24
>>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3)
True
>>> calcsize('@llh')
18
>>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3)
True
>>> calcsize('<qqh6x')
24
>>> calcsize('@llh0l')
24
>>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
True
위의 결과(64비트 기계에서 실행됨)는 다른 기계에서 실행할 때 동일한 결과가 보장되지 않습니다. 예를 들어, 아래 예제들은 32비트 기계에서 실행되었습니다:
>>> calcsize('<qqh6x')
24
>>> calcsize('@llh0l')
12
>>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
False
클래스¶
struct 모듈은 또한 다음 형을 정의합니다:
- class struct.Struct(format)¶
포맷 문자열 format에 따라 바이너리 데이터를 쓰고 읽는 새 Struct 객체를 반환합니다.
Struct객체를 한 번 만들고 메서드를 호출하는 것은 포맷 문자열이 한 번만 컴파일 되기 때문에 같은 포맷으로 모듈 수준 함수를 호출하는 것보다 효율적입니다.참고
모듈 수준 함수에 전달된 최신 포맷 문자열의 컴파일된 버전이 캐시 되므로, 몇 가지 포맷 문자열만 사용하는 프로그램은 단일
Struct인스턴스 재사용에 대해 신경 쓸 필요가 없습니다.컴파일된 Struct 객체는 다음 메서드와 어트리뷰트를 지원합니다:
- pack_into(buffer, offset, v1, v2, ...)¶
pack_into()함수와 동일하고, 컴파일된 포맷을 사용합니다.
- unpack_from(buffer, offset=0)¶
unpack_from()함수와 동일하고, 컴파일된 포맷을 사용합니다. offset 위치에서 시작하는 바이트 단위의 버퍼 크기는size이상이어야 합니다.
- iter_unpack(buffer)¶
iter_unpack()함수와 동일하고, 컴파일된 포맷을 사용합니다. 바이트 단위의 버퍼 크기는size의 배수이어야 합니다.Added in version 3.4.
- format¶
이 Struct 객체를 구성하는 데 사용된 포맷 문자열.
버전 3.13에서 변경: 구조체의 repr() 이 변경되었습니다. 현재는 다음과 같습니다:
>>> Struct('i') Struct('i')