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}") # 1040to_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.