2013-09-04 8 views
9

मैं base64 करने के लिए एक पूर्णांक एन्कोड करने के लिए कोशिश कर रहा हूँ, मुझे लगता है कि कर रहा हूँ:अजगर में base64 स्ट्रिंग के लिए में पूर्णांक एन्कोड करने के लिए कैसे 3

foo = 1 
base64.b64encode(bytes(foo)) 

उम्मीद उत्पादन:'MQ=='

दिया गया आउटपुट:b'AA=='

मैं क्या गलत कर रहा हूं?

संपादित करें: अजगर 2.7.2 में काम करता है सही ढंग से

धन्यवाद!

+1

हम्म ... अजगर के किस संस्करण का उपयोग कर रहे हैं ताकि साथ बाइट्स करने के लिए इसे सांकेतिक शब्दों में बदलना? जब मैं base64.b64encode (बाइट्स (1)) या foo = 1; base64.b64encode (बाइट्स (foo)) मुझे 'MQ ==' मिल रहा है। इसके अलावा, आप इसे कहां चला रहे हैं? – Foon

+1

जब मैं आपका कोड चलाता हूं, तो मेरे पास अपेक्षित आउटपुट होता है। क्या आपने कहीं और foo को फिर से परिभाषित किया था? बेस 64.b64encode (b'1 ') –

+0

का प्रयास करें, मैं पाइथन में पाइथन 3.3.2 – fj123x

उत्तर

3

इस प्रयास करें:

foo = 1 
base64.b64encode(bytes([foo])) 

या

foo = 1 
base64.b64encode(bytes(str(foo), 'ascii')) 
# Or, roughly equivalently: 
base64.b64encode(str(foo).encode('ascii')) 

पहला उदाहरण 1-बाइट पूर्णांक 1 encodes। दूसरा उदाहरण 1-बाइट वर्ण स्ट्रिंग '1' एन्कोड करता है।

+0

यह 'एमक्यू == ' – fj123x

+0

के बजाय' एक्यू == 'वापस कर रहा है दूसरा उदाहरण' एमक्यू == 'देता है। –

+1

जो लोग पूर्णांक को एन्कोड करना चाहते हैं, उनके लिए आउटपुट अपेक्षित नहीं है: यह काम करता है, लेकिन एन्कोडेड स्ट्रिंग आवश्यकतानुसार बहुत अधिक हो सकती है। ऐसा इसलिए है क्योंकि संख्याओं को तारों में परिवर्तित करके, आप केवल इनपुट स्पेस के एक छोटे से अंश का उपयोग कर रहे हैं, लेकिन बी 64encode इसके बारे में नहीं जानता है (उदा। यह नहीं जानता कि कोई पत्र कभी नहीं होगा)। मुझे लगता है कि 'b64encode (पैक ('<क्यू', foo) .rstrip ('\ x00') या '\ x00') करने के लिए' struct' मॉड्यूल का उपयोग करना बेहतर है। Rstrip ('=') 'जो देगा आप बड़े पूर्णांक के लिए एक बहुत छोटा एन्कोडेड स्ट्रिंग। – Mark

8

आप एक पूर्णांक एन साथ बाइट्स (एन) को प्रारंभ, तो यह आपको लंबाई एन के बाइट्स अशक्त बाइट्स के साथ प्रारंभ दे देंगे:

>>> bytes(10) 
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 

क्या आप चाहते हैं स्ट्रिंग "1" है,

>>> "1".encode() 
b'1' 

अब, base64 आप b'MQ==' दे देंगे:

>>> import base64 
>>> base64.b64encode("1".encode()) 
b'MQ==' 
+1

base64.b64encode (i.to_bytes (छत (i.bit_length()/8), 'बड़ा')) –

संबंधित मुद्दे

 संबंधित मुद्दे