Cómo convertir valores crudos Big-Endian en Python
Los archivos PSD almacenan la mayoría de los campos binarios en orden de bytes big-endian. Cuando necesites decodificar un campo bruto tú mismo — por ejemplo, a partir de los bytes crudos de un recurso de imagen — BigEndianBitConverter lee un entero de 32bits big-endian directamente de un array de bytes.
Guía paso a paso
Paso 1: Instalar el paquete
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:$PYTHONPATHPaso 2: Importar las clases requeridas
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterPaso 3: Leer los bytes crudos de un recurso
PsdImage.parsed_resources devuelve los objetos UnknownResource de nivel inferior, cada uno exponiendo la carga útil sin procesar a través de data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataPaso 4: Decodificar un valor de 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) lee 4 bytes a partir de offset y los combina con el byte más significativo primero.
Problemas comunes y soluciones
IndexError al llamar to_int32. La matriz de bytes debe tener al menos 4 bytes disponibles a partir de offset — verificar len(byte_array) >= offset + 4 antes de llamar.
Los valores parecen byte-swapped. Confirma que no estás usando accidentalmente una conversión little-endian en otra parte de tu propio código — los recursos PSD y los campos de encabezado son consistentemente big-endian, lo cual es exactamente lo que BigEndianBitConverter asume.
Preguntas frecuentes
¿BigEndianBitConverter admite otros tamaños de entero?
En esta compilación FOSS, BigEndianBitConverter proporciona únicamente to_int32 — para valores big-endian de 16bits o 64bits, decodifique los bytes manualmente con el int.from_bytes(data, byteorder="big") incorporado de Python.
¿Necesito esto para la edición normal de documentos?
No — BigEndianBitConverter es una utilidad de bajo nivel para trabajar con bytes crudos que has obtenido tú mismo (por ejemplo, de un recurso de imagen no reconocido). La carga, edición y guardado típicos (ver Trabajando con el Core API) nunca lo requiere directamente.