gpt4 book ai didi

c++ - AMQP-CPP RabbitMQ 接收额外符号,message.body() 比 message.size() 大一

转载 作者:行者123 更新时间:2023-11-30 04:59:31 26 4
gpt4 key购买 nike

当我收到一条消息时,我通过 message.body() 获取消息内容,但总是在末尾有一个额外的字符。 message.body() 的内容总是比message.size() 大1。多出的字符是'ε',ASCII码为十进制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编码:字符串

最佳答案

请考虑一下

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

关于c++ - AMQP-CPP RabbitMQ 接收额外符号,message.body() 比 message.size() 大一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51169969/

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