如何正确反序列化字符串指针?

时间:2016-08-01 10:15:38

标签: c++ string pointers serialization protocol-buffers

在C ++开发方面相对较新,特别是序列化。

我有一个网络应用程序,它使用ZeroMQ接收序列化消息,检查其中一个字段,如果有特定值,则使用ZeroMQ将消息再次转发给另一个客户端。

因此,函数A接收消息并将其存储到字符串指针:

void A()
{
  std::string* serialStr = new string(static_cast<char*>(input->Data()), input->Size());

  if(B(serialStr) == "One") {
    CreateMessage(const_cast<char*>(serialStr->c_str()), serialStr->length(), cleanup, serialStr));
  }
}

cleanup(void *data, void *hint) {delete (string*)hint;}

CreateMessage函数负责实际删除serialStr。

如何在不复制serialStr字符串的情况下调用函数B?像下面这样的东西不起作用:

std::string B(std::string* data)
{
  messaging::BMessage* msg = new messaging::BMessage;
  msg->ParseFromString(data);

  return msg->data();
}

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

引用有什么问题?以及如何复制(并且仅当它是引用或指针时才复制地址)

% create matrix
matrice=zeros(17,9);
matrice(2:16,3:6)=1;

% Plot matrix
imagesc(matrice)

% Color matrix
colormap([1 1 1; 1 0 0])

% Fix axis
axis square