首页 > 解决方案 > 如何在 Python 中的 struct 中使用 C++ struct

问题描述

我必须将 C++ 代码传输到 Micro Python 到 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] 和其他变量。在这种情况下我应该使用继承还是命名元组。如果我尝试使用 namedTuplefrom collections import namedTuple会出现以下错误消息:no module called collections,所以我希望尽可能避免使用该库

标签: pythonc++micropython

解决方案


在下面的:

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

同样适用于:

self.tags = tag_list()

推荐阅读