2015-08-04 1 views
0

Я пытаюсь написать библиотеку сериализации, и я столкнулся с проблемой. struct.unpack() говорит мне, что он нуждается в байтовой строки, которая имеет длину 112 байт, но байтовой строки очень четко длиной 112 байт, как вы можете видеть:Python struct library говорит, что bytestring неверна длина

>>> b = a.serialize(a.genericHeader() + [1,2,3,4,5,6,7,8]) 
>>> b 
'\xb0\xba\xfewGRYP\x00\x15\x00r\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ 
x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08' 
>>> c = a.deserialize(b) 
112 
6 
['\xb0', '\xba', '\xfe', 'w', 'G', 'R', 'Y', 'P', '\x00', '\x15', '\x00', 'r', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x01', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', '\x00', ' 
\x00', '\x00', '\x00', '\x02', '\x00', '\x03', '\x00', '\x04', '\x00', '\x05'] 
['\x00', '\x06', '\x00', '\x07', '\x00', '\x08'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "GS1000_messages.py", line 775, in deserialize 
    data = struct.unpack(">QHHHHQQQQQQQQQQQHHHH", data) 
struct.error: unpack requires a string argument of length 112 

Вот где я распаковать байтовой строки:

@staticmethod 
def deserialize(serialized): 

    implicit = list(serialized[0x70:]) 
    data = list(serialized[:0x70]) 
    print len(data) 
    print len(implicit) 
    print data 
    print implicit 
    data = struct.unpack(">QHHHHQQQQQQQQQQQHHHH", data) 

Из 112 вы можете видеть, что данные длиной 112 байт, так почему же struct.unpack говорит мне, что это неправильный размер?

ответ

2

Перечитайте сообщение об ошибке. Проблема заключается не в длине, а в типе данных. struct.unpack требует, чтобы входящие данные были строкой, и вы передаете ей список:

struct.error: unpack requires a **string** argument of length 112 
+0

Да, это было довольно очевидно, глядя на него сейчас, спасибо –

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