Wie man Roh-Big-Endian-Werte in Python konvertiert

Wie man Roh-Big-Endian-Werte in Python konvertiert

PSD-Dateien speichern die meisten Binärfelder in big-endian Byte-Order. Wenn Sie ein Rohfeld selbst dekodieren müssen — zum Beispiel aus den Rohbytes einer Bildressource — liest BigEndianBitConverter ein big-endian 32-Bit-Integer direkt aus einem Byte-Array.

Schritt-für-Schritt-Anleitung

Schritt 1: Paket installieren

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

Schritt 2: Erforderliche Klassen importieren

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

Schritt 3: Rohbytes einer Ressource lesen

PsdImage.parsed_resources gibt die untergeordneten UnknownResource-Objekte zurück, die jeweils die Rohdaten über data bereitstellen:

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

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

Schritt 4: Dekodiere einen 32-Bit-Big-Endian-Wert

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) liest 4 Bytes beginnend bei offset und kombiniert sie nach dem most-significant-byte-first-Prinzip.

Häufige Probleme und Lösungen

IndexError beim Aufruf to_int32. Das Byte-Array muss ab diesem Punkt mindestens 4 Bytes verfügbar sein offset — prüfen len(byte_array) >= offset + 4 vor dem Aufruf.

Werte scheinen byte-vertauscht zu sein. Stellen Sie sicher, dass Sie nicht versehentlich an anderer Stelle in Ihrem Code eine Little-Endian-Konvertierung verwenden — PSD-Ressourcen- und Header-Felder sind durchgehend Big-Endian, was genau das ist, was BigEndianBitConverter annimmt.

Häufig gestellte Fragen

Unterstützt BigEndianBitConverter andere Ganzzahlgrößen?

In diesem FOSS-Build stellt BigEndianBitConverter nur to_int32 bereit — für 16-Bit- oder 64-Bit-Big-Endian-Werte decodieren Sie die Bytes manuell mit dem integrierten int.from_bytes(data, byteorder="big") von Python.

Brauche ich das für die normale Dokumentenbearbeitung?

Nein — BigEndianBitConverter ist ein Low-Level-Dienstprogramm zum Arbeiten mit rohen Bytes, die Sie selbst erhalten haben (zum Beispiel von einer nicht erkannten Bildressource). Typisches Laden, Bearbeiten und Speichern (siehe Arbeiten mit dem Kern API) erfordert es nie direkt.

Siehe auch

 Deutsch