2

无论如何支持python中的结构并且它不支持普通关键字struct吗?

例如:

struct node
{
  unsigned dist[20];
  unsigned from[20];
}rt[10];

我怎样才能将其转换为 python 结构?

4

4 回答 4

8

我认为 Python 相当于 C-structs 是classes

class Node:
    def __init__(self):
        self.dist_ = []
        self.from_ = []

rt = []
于 2013-04-22T16:09:50.767 回答
3

由于属性的顺序(除非一个OrderedDict或某物用于__prepare__或以其他方式构建类)不一定按照定义顺序,如果您想与实际的 C 兼容struct或依赖于按某种顺序排列的数据,那么以下是一个你应该能够使用的基础(使用ctypes)。

from ctypes import Structure, c_uint

class MyStruct(Structure):
    _fields_ = [
        ('dist', c_uint * 20),
        ('from', c_uint * 20)
    ]
于 2013-04-22T16:21:23.577 回答
1

即使是空班也可以:

In [1]: class Node: pass
In [2]: n = Node()
In [3]: n.foo = [1,2,4]
In [4]: n.bar = "go"
In [8]: print n.__dict__
{'foo': [1, 2, 4], 'bar': 'go'}
In [9]: print n.bar
go
于 2013-04-22T16:18:11.650 回答
1

@Abhishek-Herle

如果我遇到你的情况,我可能会依赖 python 中的 Struct 模块。

就像,在您的情况下,C 结构是:

struct node
{
  unsigned dist[20];
  unsigned from[20];
}rt[10];

所以这里的基本思想是将C-Structure转换为python,反之亦然。我可以在下面的python代码中大致定义上面的c结构。

s = struct.Sturct('I:20 I:20') 

现在,如果我想将任何值打包到这个结构中,我可以这样做,如下所示。

dist = [1, 2, 3....20]
from = [1, 2, 3....20]
s.pack(*dist, *from)
print s #this would be binary representation of your C structure

显然,您可以使用 s.unpack 方法将其解包。

于 2015-08-28T06:59:16.597 回答