gpt4 book ai didi

c++ - std::string 到 c 字符串的转换 mosquitto

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:53:10 26 4
gpt4 key购买 nike

我正在使用 mosquitto 向订阅者发布一些消息。

对于我使用的订户:

mosquitto_sub -h host -t "new_topic"-q 0

相反,为了发布,我开发了一个使用 mosquittopp 包装器但不相关的程序。

我使用这种方法发送消息:

int MyClass::publish(const char* message) {
return mosquittopp::publish(NULL, topic_, strlen(message),
(uint8_t*) message, qos_);
}
....
MyClass publisher;
string s = base64_decode("LAAAtQ8AIXRpwoVyeMKodMK2wpPDscKBYcKDw6jCg8KAYWDDhjVCMQ==");
publisher.publish(s.c_str());

如果我打印 s,我得到:

,�!tirx¨t¶ñaèa`Æ5B1  

我觉得还可以。

但订阅者似乎只收到第一个字符,实际上只收到打印:

 ,  

有什么想法吗?

更新

这是一个BUG在我使用的版本 (1.3.1) 上,从 1.3.4 版本开始修复。

最佳答案

解码字符串的第二个字符的值为零。用于标记 C 风格字符串的结尾;所以strlen将在一个字符后发现零时报告长度为 1。

如果要使用包含空字符的“字符串”,则不能使用 C 库的空终止字符串处理函数。我会改变 MyClass::publish使用 C++ 字符串(或者可能是 std::vector<uint8_t>,这样它就不会被误认为是可打印的字符串),所以长度可用为 message.size()是否包含空字符。

关于c++ - std::string 到 c 字符串的转换 mosquitto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26040381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com