python - 在Python中设计类似C的结构的最佳方法

标签 python c class struct

首先,我刚刚开始使用Python,但我确实很努力地寻找适合我的东西。我要做的是一个简单的 Linux 文件系统,但说实话我什至不确定它是否可以用 python 实现。所以我在这里需要一些帮助。

我尝试创建一个类结构并命名元组(一次一个适合的元组),并且我认为类对我来说会更好。问题是我无法逐字节读取,因为我的类的大小是 888,而在 C 中是 44(我在那里使用了 sys.getsizeof()),通过下面的一些代码将更容易理解我想要实现的目标

对于这个结构

struct sb{
    int inode_bitmap;
    int data_bitmap[10];
};

我用过

#SUPER BLOCK
class sb(object):
    __slots__ = ['inode_bitmap', 'data_bitmap'] #REDUCE RAM USAGE
    def __init__(bruh, inode_bitmap, data_bitmap):
        bruh.inode_bitmap = inode_bitmap
        bruh.data_bitmap = [None] * 10 #DEFINITION OF ARRAY

在我读到它之前一切都很好

    FILE * fin = fopen("simplefs.bin", "r");
        struct inode slash;

    fseek(fin, sizeof(struct sb), SEEK_SET);
    fread(&slash,sizeof(slash),1,fin);
fin = open("simplefs.bin", "rb")


slash = inode

print("pos:", fin.tell())
contents = fin.read(sys.getsizeof(sb))
print(contents)

由于实际文件大小约为 4800,但当我阅读时,大小约为 318

我很清楚 python 不是 C,但我只是在做一些实验(如果可以实现的话)

最佳答案

您不能设计一个结构,然后尝试将其读/写到文件中并期望它是二进制相同的。如果您想解析任何二进制数据,您可以使用模块 struct 来将读取的数据解释为 intfloat 和 a十几种其他格式。您仍然必须手动编写格式。在您的具体情况下:

import struct

with ('datafile.dat') as fin :
    raw_data = fin.read()

data = struct.unpack_from( '11I', raw_data )  # 11 integers
inode_bitmap = data[0]
data_bitmap = data[1:]

或者类似的东西......

关于python - 在Python中设计类似C的结构的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513426/

相关文章:

python - Python可以用于客户端Web开发吗?

python - 如何在 Python 中获取 SQLite 结果/错误代码

python - 自动记录我的 REST API

python - 如何使用 C Python API 从 C 注入(inject) Python 中的可捕获异常?

python - 如何在 ipython 控制台中定义类输出

C#类/对象可视化软件

python - 如何使用 Python Boto3 根据带有通配符的前缀列出对象?

c++ - 拆分包含不同大小字符的字符串

C - 链接器错误

javascript - 函数给出未定义