2010-09-16 32 views
5

Tôi có giá trị hex mà tôi lấy từ tệp văn bản, sau đó tôi chuyển nó sang a2b_hex để chuyển đổi nó thành đại diện nhị phân phù hợp. Dưới đây là những gì tôi có:Python: binascii.a2b_hex cung cấp "Chuỗi có độ dài 1"

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

Khi tôi in k1, nó được như mong đợi: 81e3d6df

đây là thông báo lỗi:

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

Bất kỳ lời đề nghị? Cảm ơn!

+0

Cảm ơn mọi người. Tôi đã cố gắng để dải đầu vào trước đó, nhưng tôi đã không làm k1 = strip (k1). Tôi đã dải (k1). – Magicked

Trả lời

7

Bạn có chắc tệp không có gì thêm trong đó không? Chẳng hạn, khoảng trắng?

Hãy thử k1.strip()

4

Tôi nghi ngờ có một dòng mới ở cuối tệp. Tước chuỗi trước khi chuyển nó đến binascii.

Lưu ý rằng hiện cũng có cách viết đơn giản hơn: k1.strip().decode('hex').

+0

Đôi khi khi gọi 'text.strip(). Decode ('hex')' nó tăng 'TypeError: Odd-length string' too :( – 0x90

2

Tôi quan tâm nhiều hơn những gì sẽ xảy ra nếu bạn thực hiện đoạn mã sau:

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

Care để kể? Có lẽ một số nhân vật phụ bạn không thấy khi in. Trong những trường hợp này, hãy đảm bảo in chiều dài của chuỗi.

3

read() không loại bỏ dòng mới. Nếu có '\n' ở cuối tệp của bạn, nó sẽ ở trong k1.

Hãy thử binascii.a2b_hex(k1.strip()) hoặc có thể binascii.a2b_hex(k1[:8]).

Các vấn đề liên quan