簡體   English   中英

如何發送不同長度的消息而沒有結尾字節\\ x00?

[英]How to send a message of different lengths without trailing bytes \x00?

什么20的內部message()的意思是VS的20message.data(),在下面的代碼?

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM