Python是否有一个方便解析二进制格式的工具?
我有一个二进制字符串,格式如下:Python是否有一个方便解析二进制格式的工具?,python,Python,我有一个二进制字符串,格式如下: (短)num_表 (短)表格宽度 (短)桌高 表: (3*宽*高*短)表格数据 。。。重复num_表次 目前,我正在用这个非常难看的混乱来分析这个问题: def decode_table_data(input_bytes): # Data is little-endian num_tables = input_bytes[0] + (input_bytes[1] << 8) table_width = input_by
- (短)num_表
- (短)表格宽度
- (短)桌高
- 表:
- (3*宽*高*短)表格数据
- 。。。重复
次num_表
def decode_table_data(input_bytes):
# Data is little-endian
num_tables = input_bytes[0] + (input_bytes[1] << 8)
table_width = input_bytes[2] + (input_bytes[3] << 8)
table_height = input_bytes[4] + (input_bytes[5] << 8)
# TODO: Extract table_data
我知道很多语言都有这样的读取字节数组的工具(
read\u short
,read\u int
,等等)。Python中有这样的工具吗?我试着用谷歌搜索它,但找不到任何东西。您正在寻找结构
模块
import struct
def decode_table_data(input_bytes):
header = struct.Struct("<HHH")
num_tables, table_width, table_height = header.unpack_from(input_bytes)
table_size = 3 * table_width * table_height
offset = += header.size
for _ in range(num_tables):
table_data = struct.unpack_from(f"{table_size}B", input_bytes, offset)
# Do something with table_data
offset += table_size
导入结构
def解码表格数据(输入字节):
header=struct.struct(“您可能正在寻找,或者这是否回答了您的问题?这无疑是对我的代码的巨大改进,但不容易解决(3*width*height*sizeof(short))
bit。在这种情况下,我应该只写一个for循环并重复解码input_字节[I:I+2]
还是有办法在struct格式字符串中定义矩阵?我浏览了文档,但最近看到的是char[]
更新了使用struct
从输入中提取每个表的草图,不过如果您知道矩阵的确切结构,您可以做更多的工作。(例如,每个单元格是否只有6个原始字节,或者是3个短字节,或者是长字节和短字节,或者其他什么?)每个表格单元格由3个短字符组成。使用您的示例,我刚刚编写了一个嵌套的for循环,使用表示范围内的t(0,num_表格)
、范围内的y(0,高度)
、范围内的x(0,宽度),并使用提取了3个短字符
import struct
def decode_table_data(input_bytes):
header = struct.Struct("<HHH")
num_tables, table_width, table_height = header.unpack_from(input_bytes)
table_size = 3 * table_width * table_height
offset = += header.size
for _ in range(num_tables):
table_data = struct.unpack_from(f"{table_size}B", input_bytes, offset)
# Do something with table_data
offset += table_size