繁体   English   中英

Python错误:解压缩需要一个长度为4的字符串参数,但这是吗?

[英]Python error: unpack requires a string argument of length 4, but it is?

我正在使用python 2.7。 我不明白为什么这行不通,有人可以给我提示。

>>> from struct import unpack
>>> T2 = u'\xb6'+u'\x01'+u'\x59'+u'\x59'
>>> T2
u'\xb6\x01YY'
>>> unpack('i', TS)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: unpack requires a string argument of length 4

我以为我要输入4的字符串参数?

我使用unicode的原因是我正在尝试从发送的该URL中提取数据:

path="/write/?type=stxetx&packet=AX%05YX%01%00%00%00%00%00%00%02%00%A0%00%05%00%C8%00%C0%0D%28%28%00%00%E85&localpackettime=2016-12-20+09%3A18%3A57&serial=868324023356343&packettime=2016-12-20+09%3A18%3A57&receivetime=2016-12-20+09%3A18%3A58&timezone=UTC"

这是我用来获取数据包数据的代码:

packet_data = request.GET.getlist('packet')                                                                                                                                                                   
     data_list = list(packet_data[0])                                                                                                                                                                              
     print "Data list ",data_list   

这给了我一个Unicode列表,如下所示:

>> Data list  [u'A', u'v', u'\x05', u'Y', u'X', u'\x01', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x00', u'\x02', u'\x00', u'\xa0', u'\x00', u'\x05', u'\x00', u'\xc8', u'\x00', u'\xc0', u'\r', u'(', u'(', u'\x00', u'\x00', u'\xe8', u'5']

data_list[1:5]组成一个4字节的int时间戳,唯一的办法是一次解压缩值,但是会引发此错误。

在解压缩之前是否应该对unicode进行解码/编码?

您无法解压缩Unicode文本。 您将解压缩二进制数据 该错误表明您传递了错误的对象类型。 如果传入空的 Unicode字符串,则会出现相同的错误:

>>> struct.unpack('i', u'')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
struct.error: unpack requires a string argument of length 4

不要使用Unicode:

>>> struct.unpack('i', '\xb6\x01YY')
(1499005366,)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM