将转储到文件中的 C 结构体读取到 Python 数据类中

问题描述 投票:0回答:1

是否有一致的方法将 c 结构体从文件读回 Python 数据类?

例如

我有这个c结构

struct boh {
  uint32_t a;
  int8_t b;
  boolean c;
};

我想将它的数据读入它自己的Python数据类

@dataclass
class Boh:
  a: int
  b: int
  c: bool

有没有办法装饰这个类,使其以某种方式成为可能?

注意:因为我在创建类时一直在读取字节并将它们手动偏移到类中,所以我想知道是否有更好的选择。

python c byte python-dataclasses
1个回答
0
投票

由于您已经将数据读取为字节,因此可以使用

struct.unpack
将字节解包到元组中,然后可以将其解包为数据类构造函数的参数。
struct.unpack
的格式化字符可以在 here 找到,其中
L
表示无符号长整型,
b
表示带符号字符,
?
表示布尔值:

import struct
from dataclasses import dataclass

@dataclass
class Boh:
    a: int
    b: int
    c: bool

data = bytes((0xff, 0xff, 0xff, 0xff, 0x7f, 1))
print(Boh(*struct.unpack('Lb?', data)))

输出:

Boh(a=4294967295, b=127, c=True)
© www.soinside.com 2019 - 2024. All rights reserved.