2015-08-04 4 views
0

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?

Répondre

2

Relisez le message d'erreur. Le problème n'est pas la longueur, c'est le type de données. struct.unpack nécessite que les données entrantes soient une chaîne, et vous lui passez une liste:

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

Ouais c'était assez évident en le regardant maintenant, merci –