几天来,我一直在试图找到解决这个问题的办法,但到目前为止,一切都不管用。我必须提醒你,Python不是我的强项
无论如何,我正在尝试使用我用Radiohead
库编程的LoRa收发器(RFM95)发送typedef struct
。结构如下所示:
typedef struct {
double temp;
double hum;
} Payload;
我可以在raspberry端接收数据,但就像一个字节数组
Received: [0, 0, 228, 65, 154, 153, 65, 66]
如何将其转换为类似{temp: VALUE_OF_TEMP, hum: VALUE_OF_HUM}
的对象
有没有像C中那样的方法? 例如:
typedef struct {
double temp;
double hum;
} ReceivedData;
ReceivedData data;
data = *(Payload*)receivedBuffer;
请帮忙!我的创意用完了
尝试使用 #pragma包(推送,1) 结构。 #布拉格语包(流行语)
用于防止字节排列
使用struct模块很容易做到这一点:
在本例中,您正在解码两个double,因此格式为
dd
显然,您仍然应该事先进行一些验证和健全性检查,并且您可能必须处理endianness问题,但这应该足以让您继续
你没有提到你使用的是什么类型的Arduino,我假设你使用的是Arduino Uno或是带有8位MCU的东西。对于带有8位MCU的Arduino来说,
double
就像float
由4个字节组成,而不是32位MCU或Raspberry Pi中的8个字节因此,要用Python解压RPI上的结构,我认为这就是您要寻找的:
这将导致以下结果:
我想这是你通过Arduino发送的两个值
更新
如果您正在接收由多个数据结构组成的数据,则可以使用
iter_unpack()
方法:我建议您更详细地阅读Python struct的文档,以充分利用该库
相关问题 更多 >
编程相关推荐