gpt4 book ai didi

c++ - 如何在没有尾随字节\x00 的情况下发送不同长度的消息?

转载 作者:行者123 更新时间:2023-11-28 05:10:23 24 4
gpt4 key购买 nike

message() 中的 20message.data() 之后的 20 是什么意思,下面的代码?

zmq::message_t message(20);
snprintf ((char *) message.data(), 20 ,"%05d %d %d", zipcode, temperature, relhumidity);
publisher.send(message);

通过阅读文档,message(20) 将消息初始化为 20 字节长。 message.data(), 之后的20 有什么作用?

如何更改消息的大小以发送没有尾随字节的消息 \x00"%05d %d %d", zipcode, temperature, relhumidity 是否可以在外部声明,并且该变量的长度可用于启动消息并发送它?

最佳答案

您可以使用限制为零的 snprintf() 在为其分配空间之前测量数据的大小:

auto length = std::snprintf(nullptr, 0, "%05d %d %d", zipcode, temperature, relhumidity) + 1;
// +1 to account for null terminating character.

zmq::message_t message(length);

std::snprintf(
static_cast<char *>(message.data()), length,
"%05d %d %d", zipcode, temperature, relhumidity
);

publisher.send(message);

你也可以格式化到一个你知道足够大的本地缓冲区,测量字符串的长度,然后复制它:

char buffer[64];

auto length = std::snprintf(buffer, 64, "%05d %d %d", zipcode, temperature, relhumidity) + 1;

zmq::message_t message(length);

std::copy(buffer, buffer + length, static_cast<char *>(message.data());

publisher.send(message);

关于c++ - 如何在没有尾随字节\x00 的情况下发送不同长度的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43648481/

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