Como Converter Valores Brutos Big-Endian em Python
Arquivos PSD armazenam a maioria dos campos binários em ordem de bytes big-endian. Quando você precisa decodificar um campo bruto por conta própria — por exemplo, a partir dos bytes brutos de um recurso de imagem — BigEndianBitConverter lê um inteiro de 32 bits big-endian diretamente de um array de bytes.
Guia Passo a Passo
Etapa 1: Instalar o Pacote
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:$PYTHONPATHEtapa 2: Importar as Classes Necessárias
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterEtapa 3: Ler os Bytes Brutos de um Recurso
PsdImage.parsed_resources retorna os objetos UnknownResource de nível inferior, cada um expondo a carga bruta via data:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataEtapa 4: Decodificar um 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) lê 4 bytes a partir de offset e os combina com o byte mais significativo primeiro.
Problemas Comuns e Correções
IndexError ao chamar to_int32. O array de bytes deve ter pelo menos 4 bytes disponíveis a partir de offset — verifique len(byte_array) >= offset + 4 antes de chamar.
Os valores parecem ter troca de bytes. Confirme que você não está usando acidentalmente uma conversão little-endian em outro lugar no seu próprio código — os recursos e campos de cabeçalho do PSD são consistentemente big-endian, o que é exatamente o que BigEndianBitConverter supõe.
Perguntas Frequentes
O BigEndianBitConverter suporta outros tamanhos de inteiro?
Nesta compilação FOSS, BigEndianBitConverter fornece apenas to_int32 — para valores big-endian de 16 bits ou 64 bits, decodifique os bytes manualmente com o int.from_bytes(data, byteorder="big") interno do Python.
Preciso disso para edição normal de documentos?
Não — BigEndianBitConverter é um utilitário de baixo nível para trabalhar com bytes brutos que você obteve por conta própria (por exemplo, de um recurso de imagem não reconhecido). Carregamento, edição e salvamento típicos (veja Trabalhando com o Core API) nunca o requer diretamente.