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:$PYTHONPATHSchritt 2: Erforderliche Klassen importieren
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterSchritt 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.dataSchritt 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}") # 1040to_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.