【问题标题】:why protocol buffer bytes is string in c++?为什么协议缓冲区字节在 C++ 中是字符串?
【发布时间】:2012-07-13 03:10:00
【问题描述】:

协议缓冲区说它可以contain any arbitrary sequence of bytes。但是如果我的数据包含 '\0' ,协议缓冲区如何从字符串变量中编码我的整个数据。

【问题讨论】:

  • “字符串变量”是什么意思?这是char * 吗?是 C、Java 还是其他?
  • @Marcelo 我猜他的意思是string from <string>...
  • 我不再是 c++ 人,但我的印象是 \0 在 c++ 字符串中没有特殊意义除非您使用的方法专门处理\0。所以...不要使用那些方法?
  • 字符串可以包含\0。一些 API 在字符串被 \0 终止的假设上运行(例如,传统的 C 运行时),但现代 API 在不需要 @ 的指针和长度或指针到开始和指针到结束表示上运行987654328@ 被视为“特殊”。
  • 呃。我一定是错过了标题中的“c++”(或者它可能是在早期编辑窗口中添加的;我记得在寻找语言时没有看到它)。

标签: c++ string byte protocol-buffers


【解决方案1】:

协议缓冲区的 C++ 实现将字节和字符串类型返回为std::string。这个结构包含一个长度函数,告诉你对应的数据有多长(以及数据本身)。因此嵌入\0字符没有特殊意义。

设置函数也接受字符串,或者有些版本接受缓冲区和长度。 如果你想设置一个字段,你可以这样做:

pb.set_foo( std::string( data, data_length ) );

pb.set_foo( data, data_length );

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2011-05-10
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多