强制转换*将结果构造为错误的值

时间:2019-10-10 21:48:41

标签: c pointers struct casting esp32

我是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);
}

0 个答案:

没有答案