Python में बाइट्स का व्यवहार Python 2.7 और Python 3 में काफी अलग है। यह लेख स्पष्ट करता है कि दोनों संस्करणों में बाइट्स को पूर्णांकों में कैसे बदलना है, महत्वपूर्ण अंतरों पर ज़ोर देता है।
विषय-सूची
- Python 2.7 और बाइट स्ट्रिंग्स
- Python 2.7 में बाइट्स को पूर्णांकों में बदलना
- Python 3 और
bytes
प्रकार - Python 3 में बाइट्स को पूर्णांकों में बदलना
Python 2.7 और बाइट स्ट्रिंग्स
Python 2.7 में, str
प्रकार टेक्स्ट और बाइट डेटा दोनों को संभालता है। Python 3 में पाया जाने वाला एक समर्पित bytes
प्रकार अनुपस्थित है। बाइट स्ट्रिंग्स अनिवार्य रूप से बाइट मानों का प्रतिनिधित्व करने वाले वर्णों के क्रम हैं। यह याद रखना महत्वपूर्ण है कि Python 2.7 आधिकारिक तौर पर अप्रचलित है और इसका उपयोग नई परियोजनाओं के लिए नहीं किया जाना चाहिए।
Python 2.7 में बाइट्स को पूर्णांकों में बदलना
एकल बाइट्स को पूर्णांकों में बदलना ord()
फ़ंक्शन से किया जाता है:
byte_string = 'A' # 'A' का बाइट मान दर्शाता है
integer_value = ord(byte_string)
print(integer_value) # आउटपुट: 65
ord()
यूनिकोड कोड बिंदु प्रदान करता है, जो एकल बाइट्स के लिए बाइट के संख्यात्मक मान से मेल खाता है। लंबी बाइट स्ट्रिंग्स के लिए, बड़े पूर्णांकों में बदलने के लिए बिट हेरफेर आवश्यक है। निम्न उदाहरण लिटिल-एंडियन बाइट क्रम मानता है:
byte_string = 'x01x02x03' # उदाहरण बाइट स्ट्रिंग (लिटिल-एंडियन)
integer_value = 0
for byte in byte_string:
integer_value = (integer_value << 8) | ord(byte)
print(integer_value) # आउटपुट: 66051
यह पुनरावृतिपूर्वक पूर्णांक को 8 बिट्स से बाईं ओर शिफ्ट करता है और प्रत्येक बाइट को शामिल करने के लिए एक बिटवाइज़ OR लागू करता है। बिग-एंडियन क्रम के लिए, पुनरावृत्ति को उलट दें।
Python 3 और bytes
प्रकार
Python 3 स्पष्ट रूप से bytes
प्रकार का परिचय देता है, इसे str
प्रकार (यूनिकोड टेक्स्ट) से अलग करता है। bytes
ऑब्जेक्ट 0 से 255 तक के पूर्णांकों के अपरिवर्तनीय क्रम हैं।
Python 3 में बाइट्स को पूर्णांकों में बदलना
Python 3 एक स्वच्छ दृष्टिकोण प्रदान करता है। एकल बाइट के लिए:
byte_data = b'x41' # ध्यान दें कि 'b' उपसर्ग बाइट लिटरल को इंगित करता है
integer_value = byte_data[0]
print(integer_value) # आउटपुट: 65
सूचकांक 0 पर बाइट को सीधे एक्सेस करने पर पूर्णांक मान प्राप्त होता है। कई बाइट्स के लिए, int.from_bytes()
का उपयोग किया जाता है, बाइट क्रम (एंडियननेस) को निर्दिष्ट करता है:
byte_data = b'x01x02x03' # लिटिल-एंडियन उदाहरण
integer_value = int.from_bytes(byte_data, byteorder='little')
print(integer_value) # आउटपुट: 66051
byte_data = b'x01x02x03' # बिग-एंडियन उदाहरण
integer_value = int.from_bytes(byte_data, byteorder='big')
print(integer_value) # आउटपुट: 16909060
byteorder='little'
सबसे कम महत्वपूर्ण बाइट पहले को दर्शाता है, जबकि byteorder='big'
सबसे महत्वपूर्ण बाइट पहले को इंगित करता है। पोर्टेबिलिटी के लिए हमेशा byteorder
निर्दिष्ट करें; अन्यथा, सिस्टम का डिफ़ॉल्ट उपयोग किया जाता है।