struct.unpack不返回字符串

0 投票
3 回答
4495 浏览
提问于 2025-04-16 10:12

这是我的代码(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
>>>

正如手册所说,“对于解包,结果是字节对象...”

撰写回答