如何在没有尾随字节\x00 的情况下发送不同长度的消息?
How to send a message of different lengths without trailing bytes \x00?
message()
中的 20
与下面代码中 message.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()
来衡量数据的大小,然后再为其分配 space:
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);
message()
中的 20
与下面代码中 message.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()
来衡量数据的大小,然后再为其分配 space:
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);