我是C语言的新手,显然我有问题:D
我想将void*
强制转换为结构。
这是我的代码:
struct temp_config {
float min_temp;
float max_temp;
};
temp_config temp_config_ = {
.min_temp = 22.0,
.max_temp = 27.0,
};
void on_temp_conf_update(void* handler_args, esp_event_base_t base, int32_t event, void* event_data) {
temp_config *temp_config_ = (struct temp_config*)event_data;
ESP_LOGI(CONFIG_LOG_TAG, "CONF MAX TEMP %f", temp_config_->max_temp);
ESP_LOGI(CONFIG_LOG_TAG, "CONF MIN TEMP %f", temp_config_->min_temp);
}
temp_config_->max_temp
的结果为-0.001322
temp_config_->min_temp
的结果是1.977762
我想了解为什么结果不一样。
非常感谢您的帮助:)
编辑
更多详细信息:
在这里,我初始化结构并分派事件的lamba:
server.on("/api/temp", HTTP_POST, [](AsyncWebServerRequest *request){
if (!request->hasParam("max_temp", true) && !request->hasParam("max_temp", true)) {
request->send(400, "application/json", "{\"message\": \"min_temp and max_temp are required\"}");
return;
}
temp_config temp_config_ = {
.min_temp = atof(request->getParam("min_temp", true)->value().c_str()),
.max_temp = atof(request->getParam("max_temp", true)->value().c_str()),
};
event_loop_dispatch(MG_EVENT_CONF_TEMP_MUST_UPDATE, &temp_config_);
request->send(200, "application/json", "{\"message\": \"temp_updated\"}");
});
这里event_loop_dispatch
void event_loop_dispatch(mg_event event, void* event_data) {
esp_event_post_to(mg_events_loop, MG_EVENTS, event, &event_data, sizeof(event_data), portMAX_DELAY);
}
这里是事件处理程序:
void on_temp_conf_update(void* handler_args, esp_event_base_t base, int32_t event, void* event_data) {
ESP_LOGI(CONFIG_LOG_TAG, "temperature conf must update");
temp_config *temp_config_ = (struct temp_config*)event_data;
ESP_LOGI(CONFIG_LOG_TAG, "CONF MAX TEMP %f", temp_config_->max_temp);
ESP_LOGI(CONFIG_LOG_TAG, "CONF MIN TEMP %f", temp_config_->min_temp);
}