2014-12-25 2 views
1

Я убедился, что строка разделена, и я все еще получаю строку строки с нечетной длиной. Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?TypeError: строка с четной длиной при декодировании шестнадцатеричной строки

>>> toSend = "FF F9 FF 00 00 FA FF F7 FF F4 FF F6 FF F7 FF F6 FF FD FF 05 00 03 00 06 00 05 00 04 00 06 00 06 00 03 00 FB FF 02 00 0B" 
>>> toSend.decode("hex") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/encodings/hex_codec.py", line 42, in hex_decode 
    output = binascii.a2b_hex(input) 
TypeError: Odd-length string 
>>> 
+0

вы удалены пробелы? – Abdelouahab

ответ

8

Пространство в строке вводит в заблуждение метод decode. Ваш код будет работать, если вы удалите их:

>>> toSend = "FF F9 FF 00 00 FA FF F7 FF F4 FF F6 FF F7 FF F6 FF FD FF 05 00 03 00 06 00 05 00 04 00 06 00 06 00 03 00 FB FF 02 00 0B" 
>>> toSend.replace(' ', '').decode('hex') 
'\xff\xf9\xff\x00\x00\xfa\xff\xf7\xff\xf4\xff\xf6\xff\xf7\xff\xf6\xff\xfd\xff\x05\x00\x03\x00\x06\x00\x05\x00\x04\x00\x06\x00\x06\x00\x03\x00\xfb\xff\x02\x00\x0b' 
>>> 

Или, если вы должны их использовать str.join и список понимание:

>>> toSend = "FF F9 FF 00 00 FA FF F7 FF F4 FF F6 FF F7 FF F6 FF FD FF 05 00 03 00 06 00 05 00 04 00 06 00 06 00 03 00 FB FF 02 00 0B" 
>>> ' '.join([x.decode('hex') for x in toSend.split()]) 
'\xff \xf9 \xff \x00 \x00 \xfa \xff \xf7 \xff \xf4 \xff \xf6 \xff \xf7 \xff \xf6 \xff \xfd \xff \x05 \x00 \x03 \x00 \x06 \x00 \x05 \x00 \x04 \x00 \x06 \x00 \x06 \x00 \x03 \x00 \xfb \xff \x02 \x00 \x0b' 
>>> 
+0

вы также можете использовать 'binascii'' binascii.a2b_hex (toSend.replace ('', '')) ' – Abdelouahab

+0

спасибо за помощь – PhilBot

+0

это помогло мне! Arrigato! –

Смежные вопросы