Πώς να Μετατρέψετε Ακατέργαστες Τιμές 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}") # 1040to_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) δεν το απαιτεί ποτέ άμεσα.