当我收到一条消息时,我使用message.body()获得消息内容,但始终在末尾添加一个额外的字符。 message.body()的内容始终比message.size()大一。多余的字符是“α”,并且具有ASCII码Decimal 206,我不明白为什么要包含此字符。我总是必须切断此标志周围的信息,而不必如此。
我的回叫邮件:
void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
cout << "Message received: (" << message.body() << ") , " << "Body Size: " << message.bodySize() << endl;
}
示例:
通过RabbitMQ管理UI发布了以下负载:“ 12345”
回调的输出:
Message received: (12345�) , Body Size: 5
调试器:
*(message.body() + 5) 0xce 'Î' const char
当我使用RabbitMQ管理UI消耗消息时,会收到以下有效负载:
有效载荷 5个字节 12345 编码:字符串
答案 0 :(得分:1)
请考虑
message.body()
返回一个指向一个非空终止字符串的指针。您应该使用message.bodySize()来检查实际长度。
示例1 :(复制内容)
void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
cout << "Message received: (" << std::string(message.body(), message.body() + message.bodySize()) << ") , " << "Body Size: " << message.bodySize() << endl;
}
示例2 :(使用c ++ 17的string_view)
void Communicator_RabbitMQ::MessageCB(const AMQP::Message &message, uint64_t deliveryTag, bool redelivered)
{
cout << "Message received: (" << std::string_view(message.body(), message.bodySize()) << ") , " << "Body Size: " << message.bodySize() << endl;
}