Raw Big-Endian 값을 Python에서 변환하는 방법

Raw Big-Endian 값을 Python에서 변환하는 방법

PSD 파일은 대부분의 이진 필드를 빅 엔디안 바이트 순서로 저장합니다. 직접 원시 필드를 디코딩해야 할 때—예를 들어 이미지 리소스의 원시 바이트에서—BigEndianBitConverter는 바이트 배열에서 빅 엔디안 32비트 정수를 직접 읽어들입니다.

단계별 가이드

Step 1: 패키지 설치

git clone https://github.com/aspose-psd-foss/Aspose.PSD-FOSS-for-Python.git
cd Aspose.PSD-FOSS-for-Python
# No packaging manifest is published yet -- run from this folder,
# or add it to PYTHONPATH:
export PYTHONPATH=$PWD:$PYTHONPATH

Step 2: 필요한 클래스 가져오기

from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverter

Step 3: 리소스의 원시 바이트 읽기

PsdImage.parsed_resources은 하위 수준의 UnknownResource 객체를 반환하며, 각 객체는 data를 통해 원시 페이로드를 노출합니다:

image = PsdImage.load("input.psd")

for resource in image.parsed_resources:
    raw = resource.data

단계 4: 32비트 빅 엔디언 값 디코드

data = bytes([0x00, 0x00, 0x04, 0x10])  # example 4-byte big-endian field
value = BigEndianBitConverter.to_int32(data, 0)
print(f"Decoded value: {value}")  # 1040

to_int32(byte_array, offset)은 offset부터 시작하는 4바이트를 읽어 가장 높은 바이트부터 결합합니다.

일반적인 문제 및 해결 방법

IndexError 호출할 때 to_int32. 바이트 배열은 시작 위치부터 최소 4바이트가 확보되어 있어야 합니다. offset — 확인 len(byte_array) >= offset + 4 호출하기 전에.

값이 바이트 순서가 바뀐 것처럼 보입니다. 자신의 코드 다른 부분에서 실수로 리틀 엔디안 변환을 사용하고 있지 않은지 확인하십시오 — PSD 리소스와 헤더 필드는 일관되게 빅 엔디안이며, 이것이 정확히 BigEndianBitConverter 가정하는 것입니다.

자주 묻는 질문

BigEndianBitConverter가 다른 정수 크기를 지원합니까?

이 FOSS 빌드에서는 BigEndianBitConverter가 to_int32만 제공합니다 — 16비트 또는 64비트 빅엔디언 값의 경우, Python의 내장 int.from_bytes(data, byteorder="big")를 사용하여 바이트를 수동으로 디코딩하십시오.

일반 문서 편집에 이것이 필요합니까?

아니요 — BigEndianBitConverter 은(는) 직접 얻은 원시 바이트를 다루기 위한 저수준 유틸리티입니다(예: 인식되지 않은 이미지 리소스에서 얻은 경우). 일반적인 로드, 편집 및 저장(see 코어 API 작업)는 직접적으로 이를 필요로 하지 않습니다.

참조

 한국어