Cum să convertezi valori brute Big-Endian în Python

Cum să convertezi valori brute Big-Endian în Python

Fișierele PSD stochează majoritatea câmpurilor binare în ordine de octeți big-endian. Când trebuie să decodifici un câmp brut singur — de exemplu, din octeții brute ai unei resurse de imagine — BigEndianBitConverter citește un întreg de 32-bit big-endian direct dintr-un tablou de octeți.

Ghid pas cu pas

Pasul 1: Instalează pachetul

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

Pasul 2: Importă clasele necesare

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

Pasul 3: Citește octeții brute ale unei resurse

PsdImage.parsed_resources returnează obiectele UnknownResource de nivel inferior, fiecare expunând sarcina brută prin data:

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

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

Pasul 4: Decodifică o valoare de 32-Bit 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) citește 4 octeţi începând de la offset și îi combină în ordinea celui mai semnificativ octet primul.

Probleme comune și soluții

IndexError când apelați to_int32. Matricea de octeți trebuie să aibă cel puțin 4 octeți disponibili începând de la offset — verifică len(byte_array) >= offset + 4 înainte de a apela.

Valorile par inversate pe octet. Confirmă că nu folosești accidental o conversie little-endian în altă parte în codul tău — resursele PSD și câmpurile de antet sunt în mod consistent big-endian, ceea ce este exact ceea ce BigEndianBitConverter presupune.

Întrebări frecvente

Suportă BigEndianBitConverter alte dimensiuni de numere întregi?

În această construcție FOSS, BigEndianBitConverter furnizează numai to_int32 — pentru valori big-endian de 16-bit sau 64-bit, decodează manual octeții cu Python’s built-in int.from_bytes(data, byteorder="big").

Am nevoie de asta pentru editarea normală a documentelor?

Nu — BigEndianBitConverter este un utilitar de nivel jos pentru lucrul cu octeţi brute pe care i-ai obţinut tu însuţi (de exemplu, dintr-o resursă de imagine nerecunoscută). Încărcarea, editarea şi salvarea tipică (vezi Lucrul cu nucleul API) nu îl solicită niciodată direct.

Vezi și:

 Română