c++ - AMQP-CPP RabbitMQ 接收到额外的符号,message.body() 比 message.size() 大一
问题描述
当我收到一条消息时,我会使用 message.body() 获取消息内容,但最后总是带有一个额外的字符。message.body() 的内容总是比 message.size() 大一。多余的字符是'Î',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;
}
推荐阅读
- excel - 替换公式时出现运行时错误 1004
- javascript - 一种重置 Chrome DevTools 控制台上下文的方法
- powershell - 如果在确认消息框中按否,如何在 powershell 中停止事件
- php - 在php laravel中将html转换为json
- swift - 使用未解析的标识符“kCAFillModeForwards”
- c# - 使用 Okta 登录 ASP.NET Core 后将用户重定向到默认页面
- django - 带有heroku的django项目:应用程序错误
- java - 在坐标系中定义三角形的高度
- android - 将 SpotBugs 添加到我的项目中
- python - 如何在视图中访问模型中的字段?