Python 바 이 너 리 데이터 구조 Struct 의 구체 적 인 사용
4622 단어 Python이 진 데이터 구조Struct
C/C++언어 에서 struct 는 구조 체 라 고 불 린 다.한편,Python 에서 struct 는 바이트 문자열 과 원생 Python 데이터 구조 유형 간 의 전환 을 처리 하 는 전문 적 인 라 이브 러 리 입 니 다.
이 편 은 바 이 너 리 데이터 구조 struct 의 사용 방식 을 상세 하 게 소개 할 것 이다.
함수 와 Struct 클래스
struct 라 이브 러 리 는 모듈 급 함수 와 Struct 류 를 포함 합 니 다.형식 표시 자 는 문자열 형식 에서 컴 파일 표시 로 변 환 됩 니 다.이것 은 정규 표현 식 을 처리 하 는 방식 과 유사 합 니 다.
이 전환 은 일부 자원 을 소모 하기 때문에 Struct 인 스 턴 스 를 만 들 고 이 인 스 턴 스 에서 호출 방법 을 만 들 때 한 번 의 전환 만 완성 하면 더욱 효율 적 입 니 다.
포장 하 다.
Struct 는 형식 인디케이터 를 사용 하여 데 이 터 를 문자열 로 포장 하 는 것 을 지원 합 니 다.또한 문자열 에서 데 이 터 를 해제 하 는 것 을 지원 합 니 다.형식 인디케이터 는 데이터 형식 을 나타 내 는 문자열 과 선택 할 수 있 는 수량 과 바이트 순서 인디케이터 로 구성 되 어 있 습 니 다.
다음은 원 그룹 을 포장 하여 16 진 바이트 시퀀스 로 변환 합 니 다.예 는 다음 과 같 습 니 다.
import struct
import binascii
values = (2, 'lyj'.encode('UTF-8'), 3.8)
s = struct.Struct('I 3s f')
packed_data = s.pack(*values)
print(" :", values)
print(" :", s.format)
print(" :", s.size, 'bytes')
print(" :", binascii.hexlify(packed_data))
실행 후 효 과 는 다음 과 같 습 니 다.이곳 의 형식 인디케이터 는"I 3s f"입 니 다.앞에서 array 배열 을 소개 할 때,우 리 는 이미 표를 열거 한 적 이 있다.그 중에서 I 는 정형 또는 장정 형 을 표시 하고 3s 는 3 개의 바이트 문자열(lyj)을 표시 하 며 f 는 부동 점 수 를 나타 낸다.
가방 을 풀다
struct 라 이브 러 리 는 unpack()을 사용 하여 포 장 된 표시 데이터 에서 데 이 터 를 추출 할 수 있 습 니 다.여기 서 위의 포장 값 을 직접 복사 하여 테스트 할 수 있 습 니 다.예 는 다음 과 같다.
import struct
import binascii
packed_data = binascii.unhexlify(b'020000006c796a0033337340')
s = struct.Struct('I 3s f')
unpacked_data = s.unpack(packed_data)
print(" :", unpacked_data)
실행 후 효 과 는 다음 과 같 습 니 다.unpack()을 사용 하면 기본적으로 같은 값 을 얻 을 수 있 지만 부동 소수점 값 은 작은 차이 가 있 습 니 다.
바이트 순서 인디케이터
기본적으로 값 은 원생 C 라 이브 러 리 의 바이트 순서(endianness)로 인 코딩 됩 니 다.Struct 의 바이트 순서 표시 자 는 다음 표 와 같 습 니 다.
코드
속뜻
@
원생 순서
=
원생 기준
<
작은 일
>
대강
!
네트워크 순서
예 는 다음 과 같다.
import struct
import binascii
values = (2, 'lyj'.encode('UTF-8'), 3.8)
endianness = [
('@', ' '),
('=', ' '),
('<', ' '),
('>', ' '),
('!', ' '),
]
for code, name in endianness:
s = struct.Struct(code + ' I 3s f')
packed_data = s.pack(*values)
print(" :", s.format, ' for ', name)
print(" :", s.size, 'bytes')
print(" :", binascii.hexlify(packed_data))
print(" :", s.unpack(packed_data))
실행 후 효 과 는 다음 과 같 습 니 다.바이트 순 서 를 바 꾸 어 인 코딩 하려 면 위 코드 와 같이 형식 문자열 에서 명시 적 인 바이트 순서 명령 만 바 꾸 면 이 기본 선택 을 쉽게 덮어 쓸 수 있 습 니 다.
버퍼
일반적으로 성능 을 강조 할 때 나 확장 모듈 에 데 이 터 를 전송 하거나 전송 할 때 바 이 너 리 패키지 데 이 터 를 처리 합 니 다.
모든 포장 구조 에 새로운 버퍼 를 할당 하 는 비용 을 피하 기 위해 서,일반적으로 우 리 는 pack 을 사용 합 니 다.into()와 unpackfrom()방법 은 미리 분 배 된 버퍼 를 직접 기록 하 는 것 을 지원 합 니 다.
예 는 다음 과 같다.
import struct
import binascii
import ctypes
import array
values = (2, 'lyj'.encode('UTF-8'), 3.8)
s = struct.Struct('I 3s f')
print(" :", values)
b = ctypes.create_string_buffer(s.size)
print(" ( ):", binascii.hexlify(b.raw))
s.pack_into(b, 0, *values)
print(" ( ):", binascii.hexlify(b.raw))
print(" :", s.unpack_from(b, 0))
a = array.array('b', b'\0' * s.size)
print(" ( ):", binascii.hexlify(a))
s.pack_into(a, 0, *values)
print(' ( ):', binascii.hexlify(a))
print(" :", s.unpack_from(a, 0))
실행 후 효 과 는 다음 과 같 습 니 다.두 가지 방식 으로 버퍼 를 만 듭 니 다.그 중에서 size 속성 은 버퍼 에 필요 한 크기 를 가리 키 는 데 사 용 됩 니 다.
Pytho 바 이 너 리 데이터 구조 Struct 의 구체 적 인 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 Pytho 바 이 너 리 데이터 구조 Struct 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.