struct.unpack不返回字符串
这是我的代码(py3.1):
def get_string(self,chars):
return struct.unpack("{}s".format(chars),self.get_bin(chars))
我输入的是 b'MESH'
,输出却是 (b'MESH',)
。为什么我没有得到一个字符串呢?
3 个回答
0
unpack返回的是一个元组,在这个情况下是一个长度为1的元组。
在你现有的内容后面加上
[0]
,这样就能得到你想要的结果了。
0
这个可以用:
return struct.unpack("{}s".format(chars),self.get_bin(chars))[0].decode('ASCII')
但这并没有解释为什么 unpack()
自己不去做这个。我会把这个问题留着,直到有人回答。
编辑:Jason 的改进:
return self.get_bin(chars).decode('ASCII')
这真是让结构体显得很可笑……
2
在提问的时候,如果你能确保你展示的代码是你实际运行过的,那会更有帮助。你展示的代码可能会导致错误。另外,确保代码片段包含所有必要的信息,这样别人就不需要猜测了。
>>> chars = "MESH" # guess
>>> binchars = b"MESH" # guess
>>> struct_fmt = "{}s".format(chars) # what you showed
>>> struct_fmt
'MESHs' ############### won't work
>>> import struct
>>> struct.unpack(struct_fmt, binchars)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
struct.error: bad char in struct format ############ didn't work
>>> struct_fmt2 = "{}s".format(len(chars)) # what you probably did use
>>> struct_fmt2
'4s' #### looks much better
>>> struct.unpack(struct_fmt2, binchars)
(b'MESH',) ### did work
>>>
正如手册所说,“对于解包,结果是字节对象...”