struct unpack (Type Error: a byte like object is required, not 'str"), Unpack a List?
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'
我阅读了其他几篇关于此的帖子,并且它需要明确标记为字节,但我似乎无法弄清楚在这种情况下在哪里明确标记它。我发现 here and , did not provide much of an explanation to it. The struct pages 上的其他示例似乎没有涵盖 2-3 的错误可能性...只有 struct.unpack(fmt, buffer)有 fmt 和 buffer 两个参数。基于这些示例,我尝试使用 b
以及参数前和 .strip 的元组上的 bytes
将其明确识别为第二个参数。我尝试将 return 作为 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结尾。我看的数据是文本,只是想把它变回文本。
我花了一些时间在文档中回答了我自己的问题,有人为我指明了正确的方向。
生成需要返回到文本以供显示的二进制数据列表,我使用了 codecs,一个标准库。我所有的二进制数据都保存在一个名为 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.
正在尝试使用 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'
我阅读了其他几篇关于此的帖子,并且它需要明确标记为字节,但我似乎无法弄清楚在这种情况下在哪里明确标记它。我发现 here and b
以及参数前和 .strip 的元组上的 bytes
将其明确识别为第二个参数。我尝试将 return 作为 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结尾。我看的数据是文本,只是想把它变回文本。
我花了一些时间在文档中回答了我自己的问题,有人为我指明了正确的方向。
生成需要返回到文本以供显示的二进制数据列表,我使用了 codecs,一个标准库。我所有的二进制数据都保存在一个名为 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.