Cómo convertir valores crudos Big-Endian en Python

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:$PYTHONPATH

Paso 2: Importar las clases requeridas

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

Paso 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.data

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

to_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.

Ver también

 Español