python - struct unpack(类型错误:需要一个类似对象的字节,而不是“str”),解压列表?
问题描述
尝试使用在 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 pages似乎没有涵盖2-3的错误可能性......只有struct.unpack (fmt,buffer)有fmt和buffer这两个参数。基于这些示例,我尝试使用b
,以及bytes
在参数之前和 .strip 的元组上将其明确标识为字节作为第二个参数。我尝试将其作为 a 返回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.
推荐阅读
- algorithm - 当文件系统递归复制文件夹及其内容时,是使用 DFS 还是 BFS 完成的?
- html - 如果 div 是固定的,则内容超出容器的限制
- android - SharedPreference 在应用关闭状态下不起作用
- flutter - 禁用轻按时的 FlatButton 声音 (Flutter)
- azure - 如何在 azure 中设置新的测试环境
- css - 在移动设备上滚动无法使用 WordPress 页面
- sql - 无法更新 SQL 中的列
- php - 服务于两个不同版本的 php 应用程序
- android - androidx.cardview.widget.CardView 上的涟漪效应
- java - 当我将等待时间设为 10 秒时,自动化会等待网页加载 10 分钟