Comment convertir les valeurs brutes Big-Endian dans Python

Comment convertir les valeurs brutes Big-Endian dans Python

Les fichiers PSD stockent la plupart des champs binaires en ordre d’octets big-endian. Lorsque vous devez décoder vous-même un champ brut — par exemple, à partir des octets bruts d’une ressource d’image — BigEndianBitConverter lit un entier 32bits big-endian directement à partir d’un tableau d’octets.

Guide étape par étape

Étape 1: installer le package

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

Étape 2: importer les classes requises

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

Étape 3: lire les octets bruts d’une ressource

PsdImage.parsed_resources renvoie les objets UnknownResource de niveau inférieur, chacun exposant la charge brute via data :

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

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

Étape 4: décoder une valeur 32 bits big-endian

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) lit 4 octets à partir de offset et les combine du octet le plus significatif en premier.

Problèmes courants et solutions

IndexError lors de l’appel to_int32. Le tableau d’octets doit contenir au moins 4 octets disponibles à partir de offset — vérifier len(byte_array) >= offset + 4 avant d’appeler.

Les valeurs semblent être inversées d’octet. Confirmez que vous n’utilisez pas accidentellement une conversion little-endian ailleurs dans votre propre code — les ressources PSD et les champs d’en-tête sont systématiquement big-endian, ce qui est exactement ce que BigEndianBitConverter suppose.

Foire aux questions

Le BigEndianBitConverter prend-il en charge d’autres tailles d’entiers?

Dans cette version FOSS, BigEndianBitConverter ne fournit que to_int32 — pour les valeurs big-endian de 16bits ou 64bits, décodez les octets manuellement avec le int.from_bytes(data, byteorder="big") intégré de Python.

Ai-je besoin de cela pour l’édition normale de documents?

Non — BigEndianBitConverter est un utilitaire de bas niveau pour travailler avec des octets bruts que vous avez obtenus vous-même (par exemple, à partir d’une ressource image non reconnue). Le chargement, l’édition et l’enregistrement typiques (voir Travailler avec le noyau API) ne le nécessite jamais directement.

Voir aussi

 Français