RawBig-Endianमानों को Python में कैसे बदलें
PSD फ़ाइलें अधिकांश बाइनरी फ़ील्ड को बिग-एंडियन बाइट क्रम में संग्रहीत करती हैं। जब आपको स्वयं कच्चा फ़ील्ड डिकोड करना हो — उदाहरण के लिए, किसी इमेज रिसोर्स के कच्चे बाइट्स से — BigEndianBitConverter एक बाइट एरे से सीधे बिग-एंडियन 32-बिट पूर्णांक पढ़ता है।
कदम-दर-कदम मार्गदर्शिका
चरण 1: पैकेज इंस्टॉल करें
pip install aspose-psd-fossचरण 2: आवश्यक क्लासेस आयात करें
from aspose_psd_foss.psdimage import PsdImage
from aspose_psd_foss.bigendianbitconverter import BigEndianBitConverterचरण 3: रिसोर्स के कच्चे बाइट्स पढ़ें
PsdImage.parsed_resources निचले स्तर के UnknownResource ऑब्जेक्ट्स लौटाता है, प्रत्येक data के माध्यम से कच्चा पेलोड उजागर करता है:
image = PsdImage.load("input.psd")
for resource in image.parsed_resources:
raw = resource.dataचरण 4: 32-बिट बिग-एंडियन मान को डिकोड करें
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) offset से शुरू होकर 4 बाइट्स पढ़ता है और उन्हें सबसे अधिक महत्वपूर्ण बाइट पहले क्रम में संयोजित करता है।
आम समस्याएँ और समाधान
IndexError कॉल करते समय to_int32. बाइट एरे में शुरू होने पर कम से कम 4 बाइट उपलब्ध होने चाहिए offset — जाँचें len(byte_array) >= offset + 4 कॉल करने से पहले।
मान बाइट-स्वैप्ड दिख रहे हैं। पुष्टि करें कि आप अपने कोड में अनजाने में कहीं लिटिल-एंडियन रूपांतरण का उपयोग नहीं कर रहे हैं — PSD संसाधन और हेडर फ़ील्ड लगातार बिग-एंडियन हैं, जो बिल्कुल वही है जो BigEndianBitConverter मानता है।
अक्सर पूछे जाने वाले प्रश्न
क्या BigEndianBitConverter अन्य पूर्णांक आकारों का समर्थन करता है?
इस FOSS बिल्ड में, BigEndianBitConverter केवल to_int32 प्रदान करता है — 16-बिट या 64-बिट बिग-एंडियन मानों के लिए, बाइट्स को मैन्युअली Python के बिल्ट-इन int.from_bytes(data, byteorder="big") से डिकोड करें।
क्या मुझे सामान्य दस्तावेज़ संपादन के लिए यह चाहिए?
नहीं — BigEndianBitConverter यह एक निम्न-स्तरीय उपयोगिता है जो आपके द्वारा प्राप्त कच्चे बाइट्स (उदाहरण के तौर पर, किसी अपरिचित छवि स्रोत से) के साथ काम करती है। सामान्य लोडिंग, संपादन, और सहेजना (देखें Core API का उपयोग) सीधे तौर पर इसकी आवश्यकता नहीं रखता।