Python struct library表示bytestring的长度不正确

时间:2015-08-04 15:00:46

标签: python serialization struct bytestring

我正在尝试编写序列化库并遇到问题。 struct.unpack()告诉我它需要一个112字节长的字节串,但是字节串非常明显是112字节长,你可以看到:

>>> 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

这里我解压wordtring:

@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告诉我它不是正确的尺寸?

1 个答案:

答案 0 :(得分:2)

重新阅读错误消息。问题不在于长度,而在于数据类型。 struct.unpack要求传入的数据为字符串,并且您将其传递给列表:

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