Hur man konverterar råa big-endian-värden i Python

Hur man konverterar råa big-endian-värden i Python

PSD-filer lagrar de flesta binära fält i big-endian-byteordning. När du behöver avkoda ett rått fält själv — till exempel från en bildresurs råa byte — läser BigEndianBitConverter ett big-endian 32-bitars heltal direkt från en bytearray.

Steg-för-steg-guide

Steg 1: Installera paketet

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

Steg 2: Importera nödvändiga klasser

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

Steg 3: Läs en resurs råa byte

PsdImage.parsed_resources returnerar de lägre nivåns UnknownResource objekt, var och en exponerar den råa nyttolasten via data:

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

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

Steg 4: Avkoda ett 32-bitars big-endian-värde

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) läser 4 byte som börjar vid offset och kombinerar dem mest signifikanta byte först.

Vanliga problem och lösningar

IndexError vid anrop to_int32. Bytearrayen måste ha minst 4 byte tillgängliga med start vid offset — kontrollera len(byte_array) >= offset + 4 innan du anropar.

Värdena ser byte-swapped ut. Bekräfta att du inte av misstag använder en little-endian-omvandling någon annanstans i din egen kod — PSD-resurs- och huvudfält är konsekvent big-endian, vilket är exakt vad BigEndianBitConverter förutsätter.

Vanliga frågor

Stöder BigEndianBitConverter andra heltalsstorlekar?

I den här FOSS-byggnaden tillhandahåller BigEndianBitConverter endast to_int32 — för 16-bitars eller 64-bitars big-endian-värden, avkoda bytena manuellt med Python s inbyggda int.from_bytes(data, byteorder="big").

Behöver jag detta för normal dokumentredigering?

Nej — BigEndianBitConverter är ett lågnivåverktyg för att arbeta med råa byte du har erhållit själv (till exempel från en oigenkänd bildresurs). Vanlig inläsning, redigering och sparande (se Arbeta med kärnan API) kräver den aldrig direkt.

Se även

 Svenska