Я пытаюсь написать библиотеку сериализации, и я столкнулся с проблемой. 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 говорит мне, что это неправильный размер?
Да, это было довольно очевидно, глядя на него сейчас, спасибо –