繁体   English   中英

struct unpack(类型错误:需要像对象这样的字节,而不是'str“),解压缩列表?

[英]struct unpack (Type Error: a byte like object is required, not 'str"), Unpack a List?

尝试使用Python 2内置的脚本,现在在Python 3中使用它,而未在系统中添加版本2。 对于脚本,我得到的唯一错误与这一行的struct.unpack有关。

def go_parse(rec_list):
    size = (len(rec_list) - 4) / 4
    first_arg = "%sI" % size
    return struct.unpack(first_arg, (rec_list.rstrip ('\xff\xff\xff\xff')))

在此函数的第4行,我得到了错误:

TypeError: a bytes-like object is required, not 'str'

我阅读了有关此内容的其他几篇文章,并且需要将其显式标记为字节,但是在这种情况下,我似乎无法弄清楚在何处显式标记该字节。 我在这里这里找到的关于SO的其他示例对此没有提供太多解释。 struct页面似乎并未涵盖2-3的错误可能性...仅struct.unpack(fmt,buffer)具有fmt和buffer这两个参数。 基于这些示例,我尝试使用b明确标识为第二个arg bytes ,以及.strip参数和元组之前的字节。 我试图将其作为bytearray返回,但这似乎会产生相同的错误。

或者,我可以将所需的字节数据放入列表中,如下所示,这是将列表拆包的一种方法,尝试b'i'只是将i视为字节。

list1 = [b'\x03\x00\x00\x00\xff\xff\xff\xff',
b'\x07\x00\x00\x00\x06\x00\x00\x00\xff\xff\xff\xff']

print(struct.unpack('<s', bytes(i)))

字节的长度各不相同,但全部以\\ xff \\ xff \\ xff \\ xff结尾。 我正在查看的数据是文本,只是试图将其恢复为文本。

我花了一些时间在文档中回答了自己的问题,有人指出了正确的方向。

生成需要返回到文本进行显示的二进制数据列表,我使用了编解码器 (标准库)。 我所有的二进制数据都保存到名为bin_list的列表中。

import codecs

bin_list = [b'Some Binary data', b'some more binary data']

for i in bin_list:    # used the loop to print each to new line, nice and neat
    print (codecs.decode(i, "utf-8", "ignore"))   # or any other conversion avilable on codecs.

暂无
暂无

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

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