2015-03-13 17 views
8

मैं बाइनरी मानों के लिए हेक्स स्ट्रिंग को डीकोड करने का प्रयास कर रहा हूं। मैं इंटरनेट पर आदेश में यह कर पाने के लिए नीचे इस पाया,'str' ऑब्जेक्ट में कोई विशेषता नहीं है 'डीकोड'

string_bin = string_1.decode('hex') 

लेकिन मैं कह रहा

'str' object has no attrubute 'decode' 

मैं अजगर v3.4.1

उत्तर

1

उपयोग binascii उपयोग कर रहा हूँ त्रुटि मिली:

import binascii 

binary_string = binascii.unhexlify(hex_string) 
9

आप स्ट्रिंग ऑब्जेक्ट्स को डीकोड नहीं कर सकते हैं; वे पहले से ही डीकोड किए गए हैं। आपको एक अलग विधि का उपयोग करना होगा।

तुम एक कोडेक के रूप में लागू करने के लिए hexcodecs.decode() function उपयोग कर सकते हैं:

>>> import codecs 
>>> codecs.decode('ab', 'hex') 
b'\xab' 

यह लागू होता है एक Binary transform कोडेक;

>>> import binascii 
>>> binascii.unhexlify('ab') 
b'\xab' 

कोई एक:

>>> import base64 
>>> base64.b16decode('AB') 
b'\xab' 

तुम भी binascii.unhexlify() function 'डिकोड' करने के लिए बाइट्स हेक्स अंक के अनुक्रम का उपयोग कर सकते हैं: यह base64.b16decode() function का उपयोग कर, इनपुट स्ट्रिंग के साथ के बराबर अपरकेस में परिवर्तित है रास्ता, आपको bytes ऑब्जेक्ट मिलेगा।

+0

>>> रों = '1bcd67879034' >>> codecs.decode (रों, 'हेक्स') बी '\ x1B \ xcdg \ x87 \ x904' >>> ######### ########## यह अपेक्षित परिणाम नहीं है: लेकिन अपेक्षित "बी '\ x1b \ xcd \ x67 \ x87 \ x90 \ x34'" ## मुझे क्या याद आ रहा है? – rahookds

+0

@rahookds: यह सही दिखता है। ध्यान दें कि बाइट्स शाब्दिक प्रतिनिधित्व केवल * गैर-प्रिंट करने योग्य * बाइट्स के लिए \ xhh' एस्केप अनुक्रमों का उपयोग करता है। '34' '' '' अक्षर के लिए हेक्स ASCII कोडपॉइंट है, उदाहरण के लिए। '67' 'जी' है। –

+0

हाँ! तो, मैं कैसे देख सकता हूं कि मैं क्या देख रहा हूं? ;-) – rahookds

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