如何在 Python 中的结构中使用C++结构

How to use C++ struct in struct in Python

本文关键字:结构 C++ Python      更新时间:2023-10-16

我必须将C++代码传输到Micro Python to Wipy平台。目前,我遇到了一些问题,尤其是在从其他结构访问变量时

C++代码:

typedef struct {
    char id[100];
    int rssi;
} tag_info;
typedef struct {
    tag_info tag[20];
} tag_list;
typedef struct {
    int timestamp;
    tag_list tags;
    int heading;
    int airt;
} data_packet;
data_packet packet;
for (i = 0; i < total_amount_of_tags - 1; i++) {
            print_function("id", packet.tags.tag[i].id, destination); 
            print_function("rssi", packet.tags.tag[i].rssi, destination);
        }

我的MicroPython代码:

class tag_info:
    def __init__(self):
        self.id = ""
        self.rssi = 0
class tag_list:
    def __init__(self):
        self.tag = tag_info
class data_packet():
    def __init__(self):
        self.timestamp=0
        self.tags = tag_list
        self.heading=0
        self.airt=0
packet=data_packet()
for i in range(0, total_amount_of_tags -1)
    print_function('id',packet.tags.tag[i].id,destination)
    print_function("rssi", packet.tags.tag[i].rssi, destination); 

我的代码中的问题是我无法访问 tag[i] 和其他变量。在这种情况下,我应该使用继承还是命名元组。如果我尝试使用 namedTuple from collections import namedTuple则会出现以下错误消息:no module called collections ,因此如果可能的话,我宁愿避免使用该库

在下面:

self.tag = tag_info
您正在为变量分配一个类。我假设你的意思是:
self.tag = tag_info()
但是如果我理解正确,这应该是tag_info列表,所以您实际上需要的是:
self.tag = [tag_info() for i in range(20)]

这同样适用于:

self.tags = tag_list()

对于预期的行为应该是什么,这有点令人困惑。 但看起来您需要创建 20 个 tag_info 实例 . 此外,您还需要使用 () 实例化您的实例。

class tag_info:
    def __init__(self):
        self.id = ""
        self.rssi = 0
class tag_list:
    def __init__(self):
        self.tag = [tag_info() for _ in range(20)]
class data_packet():
    def __init__(self):
        self.timestamp=0
        self.tags = tag_list()
        self.heading=0
        self.airt=0