【问题标题】:How to convert bool type to const char*如何将 bool 类型转换为 const char*
【发布时间】:2019-11-30 01:16:47
【问题描述】:

我正在尝试使用PubSubClient 库的成员函数,该函数采用参数const char* 之一,但我需要将bool type 变量从我的代码传递给该成员函数(作为有效负载)。我怎样才能做到这一点?

库的成员函数如下:

boolean PubSubClient::publish(const char* topic, const char* payload) {
    return publish(topic,(const uint8_t*)payload,strlen(payload),false);
}

【问题讨论】:

  • publish(topic, type?"T":"F"); 怎么样? (接收值的代码当然必须知道 T=true F=false 约定)
  • 感谢 Jeremy,我编译程序没有任何错误。但是,我需要将代码上传到 esp32 以确保一切正常。

标签: c++ arduino mqtt arduino-esp8266


【解决方案1】:

嗯,函数需要一个常量作为输入。这意味着您不能将变量传递给它。常量值不能更改并且是硬编码的。将其与定义进行比较,您绝对不能这样做:

#define CONSTANT      0
CONSTANT = 1

我想要得到的是,这个函数只能采用在编译时设置的值。但是由于 bool 只能取两个不同的值,这意味着您的有效负载只能有两个不同的值。我们把布尔类型的变量称为option。你可以这样实现它:

const char option_1 = '0';
const char option_2 = '1';

PubSubClient client;

...
if(option == 0)
{
    client.publish(&topic, &option_1);
}
else
{
    client.publish(&topic, &option_2);
}
...

甚至更短,像这样:

...
client.publish(&topic, option ? &option_2 : &option_1);
...

希望对您有所帮助。

【讨论】:

  • payload 是指向option_2 的指针时,当PubSubClient::publish() 调用strlen(payload) 时,发布的代码将调用未定义的行为。如果你打算这样做,你需要 NUL 终止你的“字符串”(例如const char option_2[] = {'1', 0};
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多