2016-08-29 12 views
5

पर डीकोड बेस 64 स्ट्रिंग मैं एक पायथन स्क्रिप्ट तैयार करूंगा जो बेस 64 स्ट्रिंग को बाइट (या हेक्स मानों की सरणी) में डीकोड करेगा।बाइट सरणी

मेरी परियोजना का एम्बेडेड पक्ष एक माइक्रो नियंत्रक है जो कच्चे बाइट से शुरू होने वाली बेस 64 स्ट्रिंग बनाता है। स्ट्रिंग में कुछ नो-प्रिंट करने योग्य वर्ण होते हैं (इस कारण से मैं बेस 64 एन्कोडिंग चुनता हूं)।

पीसी पक्ष पर मुझे बेस 64 स्ट्रिंग को डीकोड करने और मूल कच्चे बाइट को पुनर्प्राप्त करने की आवश्यकता है।

base64Packet = raw_input('Base64 stream:') 

packet = base64.b64decode(base64Packet) 

sys.stdout.write("Decoded packet: %s"%packet) 

जिसके परिणामस्वरूप स्ट्रिंग एक वर्ण स्ट्रिंग है कि कुछ नहीं प्रिंट करने योग्य चार होता है:

मेरे स्क्रिप्ट अजगर 2.7 और बेस 64 पुस्तकालय उपयोग करता है।

क्या बेस 64 स्ट्रिंग को बाइट (या हेक्स) मानों को डीकोड करने का कोई तरीका है?

अग्रिम धन्यवाद!

+0

आपके पास पहले से ही * है * यह है कि। आप किस आउटपुट की उम्मीद कर रहे थे और आप क्या देखते हैं? शायद आप मुद्रण करते समय '% r' का उपयोग करना चाहते थे? –

+0

@MartijnPieters: डिकोडिंग के बाद मेरे पास एक पाइथन सूची होगी जिसमें प्रत्येक एकल बाइट होता है। – Federico

+1

आपको इसकी आवश्यकता क्यों है? क्या आपको बाइट्स में हेरफेर करने की ज़रूरत है? एक 'str' ऑब्जेक्ट पहले से ही अनुक्रम है, आप' बाइट [इंडेक्स] 'के साथ प्रत्येक बाइट को संबोधित कर सकते हैं, उदाहरण के लिए, या पैकेट में बाइट के लिए स्ट्रिंग पर लूप: '। –

उत्तर

5

आप इस के लिए bytearray का उपयोग कर सकते हैं। संभवतः binascii मॉड्यूल और struct भी सहायक हो सकता है।

import binascii 
import struct 

binstr=b"thisisunreadablebytes" 

encoded=binascii.b2a_base64(binstr) 
print encoded 
print binascii.a2b_base64(encoded) 

ba=bytearray(binstr) 
print list(ba) 

print binascii.b2a_hex(binstr) 
print struct.unpack("21B",binstr) 
+0

धन्यवाद! क्या आप मेरी समस्या को हल करने के लिए बाइटैसी, बिनसासी और संरचना के उपयोग के लिए एक उदाहरण प्रदान कर सकते हैं? मैं अजगर का मालिक नहीं हूँ! – Federico

+0

जोड़े गए उदाहरण - यदि आप अधिक विशिष्ट हो सकते हैं कि इनपुट किस प्रकार बनना चाहिए, तो मैं विस्तार कर सकता हूं ... – janbrohl

+0

आपके उदाहरण के लिए धन्यवाद! मैं इस कोड लाइन के साथ पूर्णांक मानों की सूची प्राप्त करता हूं: stapacketString = list (bytearray (base64.b64decode (base64Packet)))। क्या यह सही तरीका है? मेरे दायरे के लिए यह काम करता है। – Federico