无论如何都支持python中的结构并且它不支持普通关键字 struct 吗?
例如:
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
如何将其转换为python结构?
答案 0 :(得分:8)
我认为Python等同于C-structs是classes
:
class Node:
def __init__(self):
self.dist_ = []
self.from_ = []
rt = []
答案 1 :(得分:3)
由于属性的排序(除非OrderedDict
或其他东西用于__prepare__
或以其他方式构建类)不一定按定义顺序,如果你想与实际C兼容struct
或依赖于某种顺序的数据,以下是您应该能够使用的基础(使用ctypes
)。
from ctypes import Structure, c_uint
class MyStruct(Structure):
_fields_ = [
('dist', c_uint * 20),
('from', c_uint * 20)
]
答案 2 :(得分: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
答案 3 :(得分:1)
@ Abhishek-Herle
如果我遇到你的情况,我可能会依赖python中的Struct模块。
就像在你的情况下C结构是:
struct node
{
unsigned dist[20];
unsigned from[20];
}rt[10];
所以这里的基本思想是将C-Structure转换为python,反之亦然。我可以在下面的python代码中大致定义上面的c-structure。
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方法解压缩它。