2010-09-16 15 views
5

देता है मेरे पास एक हेक्स मान है जो मैं एक टेक्स्ट फ़ाइल से पकड़ रहा हूं, फिर मैं इसे उचित बाइनरी प्रतिनिधित्व में बदलने के लिए इसे a2b_hex पर भेज रहा हूं। यहाँ मैं क्या है:पायथन: binascii.a2b_hex "विषम-लंबाई स्ट्रिंग"

k = open('./' + basefile + '.key', 'r') 
k1 = k.read() 
k.close() 
my_key = binascii.a2b_hex(k1) 

जब मैं k1, यह उम्मीद है के रूप में मुद्रित: 81e3d6df

त्रुटि संदेश यह:

Traceback (most recent call last): 
    File "xor.py", line 26, in <module> 
    my_key = binascii.a2b_hex(k1) 
TypeError: Odd-length string 

कोई सुझाव? धन्यवाद!

+0

सभी को धन्यवाद। मैंने पहले इनपुट को पट्टी करने की कोशिश की थी, लेकिन मैंने k1 = स्ट्रिप (k1) नहीं किया था। मैंने स्ट्रिप किया (के 1)। – Magicked

उत्तर

7

क्या आप सुनिश्चित हैं कि फ़ाइल में इसमें कुछ अतिरिक्त नहीं है? उदाहरण के लिए व्हाइटस्पेस?

k1.strip()

4

मुझे संदेह है कि फ़ाइल के अंत में एक पिछली नई लाइन है। binascii पर जाने से पहले स्ट्रिंग को स्ट्रिप करें।

ध्यान दें कि अब भी एक सरल वर्तनी है: k1.strip().decode('hex')

+0

कभी-कभी 'text.strip()। Decode (' हेक्स ') को कॉल करते समय' यह टाइप टाइपर: विषम-लंबाई स्ट्रिंग 'भी उठाता है :( – 0x90

2

प्रयास करें मैं अधिक रुचि है, तो आप निम्नलिखित कोड निष्पादित क्या होता हूँ:

with open("./" + basefile + ".key") as key_file: 
    key = key_file.read() 
    print len(key), key 

देखभाल बताने के लिए? प्रिंटिंग के दौरान शायद कुछ अतिरिक्त चरित्र नहीं दिखते हैं। इन मामलों में, स्ट्रिंग की लंबाई मुद्रित करना सुनिश्चित करें।

3

read() न्यूलाइन को पट्टी नहीं करता है। अगर आपकी फ़ाइल के अंत में '\n' है, तो यह k1 में होगा।

binascii.a2b_hex(k1.strip()) या संभवतः binascii.a2b_hex(k1[:8]) आज़माएं।

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