J'essaie d'écrire une bibliothèque de sérialisation et je rencontre un problème. struct.unpack() me dit qu'il a besoin d'un bytestring qui est de 112 octets, mais le bytestring est très clairement 112 octets, comme vous pouvez le voir:La bibliothèque de structures Python indique que la chaîne bytestring est incorrecte.
>>> 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
Voici où je déballe le bytestring:
@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)
Vous pouvez voir à partir du 112 qu'il imprime que les données sont longues de 112 octets, alors pourquoi struct.unpack me dit-il que ce n'est pas la bonne taille?
Ouais c'était assez évident en le regardant maintenant, merci –