Πώς να Μετατρέψετε Ακατέργαστες Τιμές Big-Endian στο Python

Πώς να Μετατρέψετε Ακατέργαστες Τιμές Big-Endian στο Python

Τα αρχεία PSD αποθηκεύουν τα περισσότερα δυαδικά πεδία σε σειρά byte big-endian. Όταν χρειάζεται να αποκωδικοποιήσετε ένα ακατέργαστο πεδίο μόνοι σας — για παράδειγμα, από τα ακατέργαστα byte ενός πόρου εικόνας — το BigEndianBitConverter διαβάζει έναν 32-bit ακέραιο big-endian απευθείας από έναν πίνακα byte.

Οδηγός βήμα-βήμα

Βήμα 1: Εγκαταστήστε το πακέτο

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

Βήμα 2: Εισάγετε τις απαιτούμενες κλάσεις

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

Βήμα 3: Διαβάστε τα ακατέργαστα byte ενός πόρου

PsdImage.parsed_resources επιστρέφει τα χαμηλότερου επιπέδου αντικείμενα UnknownResource, το καθένα εκθέτει το ακατέργαστο payload μέσω data:

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

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

Βήμα 4: Αποκωδικοποίηση 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) διαβάζει 4 byte ξεκινώντας από το offset και τα συνδυάζει με τη σειρά πιο σημαντικού byte πρώτα.

Κοινά Προβλήματα και Διορθώσεις

IndexError κατά την κλήση to_int32. Ο πίνακας byte πρέπει να έχει τουλάχιστον 4 byte διαθέσιμα ξεκινώντας από offset — έλεγχος len(byte_array) >= offset + 4 πριν την κλήση.

Οι τιμές φαίνονται byte-swapped. Επιβεβαιώστε ότι δεν χρησιμοποιείτε κατά λάθος μετατροπή little-endian κάπου αλλού στον κώδικά σας — οι πόροι PSD και τα πεδία κεφαλίδας είναι σταθερά big-endian, που είναι ακριβώς αυτό που BigEndianBitConverter υποθέτει.

Συχνές Ερωτήσεις

Υποστηρίζει το BigEndianBitConverter άλλα μεγέθη ακεραίων;

Σε αυτήν την έκδοση FOSS, το BigEndianBitConverter παρέχει μόνο το to_int32 — για τιμές 16-bit ή 64-bit big-endian, αποκωδικοποιήστε τα byte χειροκίνητα με το ενσωματωμένο int.from_bytes(data, byteorder="big") του Python.

Χρειάζομαι αυτό για την κανονική επεξεργασία εγγράφων;

Όχι — BigEndianBitConverter είναι ένα εργαλείο χαμηλού επιπέδου για εργασία με ακατέργαστα bytes που έχετε αποκτήσει μόνοι σας (για παράδειγμα, από μη αναγνωρισμένο πόρο εικόνας). Η τυπική φόρτωση, επεξεργασία και αποθήκευση (δείτε Εργασία με τον Πυρήνα API) δεν το απαιτεί ποτέ άμεσα.

Δείτε επίσης

 Ελληνικά