Hoe ruwe Big-Endian-waarden te converteren in Python

Hoe ruwe Big-Endian-waarden te converteren in Python

PSD-bestanden slaan de meeste binaire velden op in big-endian bytevolgorde. Wanneer je zelf een ruwe veld moet decoderen — bijvoorbeeld vanuit de ruwe bytes van een afbeeldingsresource — leest BigEndianBitConverter een big-endian 32-bits geheel getal direct uit een byte-array.

Stapsgewijze handleiding

Stap 1: Installeer het pakket

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

Stap 2: Importeer de vereiste klassen

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

Stap 3: Lees de ruwe bytes van een resource

PsdImage.parsed_resources retourneert de onderliggende UnknownResource objecten, elk de ruwe payload beschikbaar stellend via data:

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

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

Stap 4: Decodeer een 32-Bit Big-Endian-waarde

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) leest 4 bytes beginnend bij offset en combineert ze met het meest significante byte eerst.

Veelvoorkomende problemen en oplossingen

IndexError bij het aanroepen to_int32. De byte array moet minstens 4 bytes beschikbaar hebben vanaf offset — controle len(byte_array) >= offset + 4 voor het aanroepen.

Waarden lijken byte-swapped. Bevestig dat je niet per ongeluk ergens in je eigen code een little-endian conversie gebruikt — PSD resource en header fields zijn consequent big-endian, wat precies is wat BigEndianBitConverter aanneemt.

Veelgestelde vragen

Ondersteunt BigEndianBitConverter andere integergroottes?

In deze FOSS-build biedt BigEndianBitConverter alleen to_int32 — voor 16-bit of 64-bit big-endian-waarden decodeer je de bytes handmatig met de ingebouwde int.from_bytes(data, byteorder="big") van Python.

Heb ik dit nodig voor normale documentbewerking?

Nee — BigEndianBitConverter is een low-level hulpprogramma voor het werken met ruwe bytes die je zelf hebt verkregen (bijvoorbeeld van een niet-herkende afbeeldingresource). Typisch laden, bewerken en opslaan (zie Werken met de Core API) vereist het nooit direct.

Zie ook

 Nederlands