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:$PYTHONPATHPasul 2: Importă clasele necesare
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterPasul 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.dataPasul 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}") # 1040to_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.