Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python是否有一个方便解析二进制格式的工具?_Python - Fatal编程技术网

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