파이썬 구조체에 정수를 패킹 한 후에 언 패킹은 하나의 항목 만 포함하는 경우에도 튜플을 생성합니다. 언 패킹이 튜플을 반환하는 이유는 무엇입니까?struct를 언 패킹하면 터플이 생성되는 이유는 무엇입니까?
>>> x = struct.pack(">i",1)
>>> str(x)
'\x00\x00\x00\x01'
>>> y = struct.unpack(">i",x)
>>> y
(1,)
파이썬 구조체에 정수를 패킹 한 후에 언 패킹은 하나의 항목 만 포함하는 경우에도 튜플을 생성합니다. 언 패킹이 튜플을 반환하는 이유는 무엇입니까?struct를 언 패킹하면 터플이 생성되는 이유는 무엇입니까?
>>> x = struct.pack(">i",1)
>>> str(x)
'\x00\x00\x00\x01'
>>> y = struct.unpack(">i",x)
>>> y
(1,)
문서 제 struct doc
다음 struct.pack (FMT, V1, V2, ...) 값을 포함
복귀 문자열을보십시오 V1, V2, ... 지정된 형식에 따라 압축됩니다. 인수는 이 형식에서 요구하는 값과 정확하게 일치해야합니다.
-
struct.unpack (FMT, 문자열)
문자열을 풀고 (아마도 팩 포장 (FMT, ...))이 소정 포맷에 따라. 정확히 하나의 항목이 포함 된 경우에도 결과는 튜플 입니다. 문자열은 정확히 형식에 필요한 데이터의 양을 포함해야합니다. len (string)은 calcsize (fmt)와 같아야합니다.
struct.pack
은 struct.pack(fmt, v1, v2, ...)
으로 정의되기 때문에. 키워드가 아닌 인수 목록 (v1, v2, ...
, 별명 *args
), 을 허용하므로 struct.unpack
은 객체와 같은 목록을 반환해야하므로 튜플이 그 이유입니다.
그것은 당신이
x = struct.pack(fmt, *args)
args = struct.unpack(fmt, x) # return *args
예로 팩을 고려하면 이해하기 쉬울 것이다 : C 언어를 사용하여 작성된 바이너리 데이터를로드하는 유스 케이스
>>> x = struct.pack(">i", 1)
>>> struct.unpack(">i", x)
(1,)
>>> x = struct.pack(">iii", 1, 2, 3)
>>> struct.unpack(">iii", x)
(1, 2, 3)
생각합니다. 파이썬은 구조체를 사용하거나 단일 정수를 사용하여 이진 데이터를 작성한 경우 구별 할 수 없습니다. struct pack과 unpack은 파이썬 값과 C 구조체 사이의 변환을 수행하므로 논리적으로 항상 튜플을 반환하는 것이 좋습니다.
구조체에 둘 이상의 항목이 들어 있으면 반환하는 항목은 무엇입니까? 일반적으로 함수가 하나의 유형 만 반환하는 것이 가장 좋습니다 (호출자가 하나의 항목이 있는지 또는 두 가지가 있는지 또는 ... 여부에 따라 특별한 경우가 필요하지 않음) – mgilson
알겠습니다 ...이 유일한/올바른/Pythonic입니까? * int *를 팩/언팩하는 방법? – Jedi
최근의 파이썬 버전에는'int.from_bytes'와'int.to_bytes'가 있습니다. – mgilson