arrays - 如何在protobuf重复字段中发送0?

标签 arrays list networking null protocol-buffers

例如,当我尝试发送具有这些值 [14,56,0,63,22,6] 的数组时,我的客户端仅收到 零之前的值 [14,56]。我知道默认值没有序列化,但是这个0在重复字段中。那么是否可以使用 protobuf 消息通过网络发送整个数组?

syntax = "proto3";

package server;

message SrvPossibleMoves {
  int32 id = 1;
  int32 index = 2;
  repeated int32 moves = 3 [packed=false];
}

最佳答案

(评论中的询问的扩展版本)

这听起来是中间代码(不是 protobuf 库本身,而是传递字节时的问题)的典型问题,即将有效负载视为 C 风格(以 nul 结尾)字符串。这种情况下的零值将被编码为零字节,这在二进制数据中完全有效,但这将导致 C 样式字符串处理 API 在该点剪切数据。我希望大多数 protobuf 库能够检测到它需要额外的值(在某些情况下这是可能的,而在某些情况下这是不可能的;在这种情况下 - 似乎是可能的),并且此时抛出异常,但是...这将是特定于库的。

因此:检查 C 风格字符串处理的代码,并删除任何此类字符串 - 通常通过同时传递长度和有效负载(而不是依赖终止符)。


在本例中,有问题的代码是:std::strlen(data_.get())

关于arrays - 如何在protobuf重复字段中发送0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59097077/

相关文章:

python - 如何构建一个允许用户将作业提交到队列的系统

arrays - 动态添加复选框 - 运行时错误 424

c - 使用 sizeof 分配和初始化矩阵

c++ - 如何指向链表中的下一个节点并打印值

python - 如何只读取python中字符串列表的一部分

node.js - TCP 和 Node.js 的实时多人游戏原理

JavaScript 奇怪的数组作用域问题

python - 使用 Python numpy where 条件将整体更改为低于特定值

list - Julia 中是否有 if-else 列表推导式

java - 通过网络发送文件时如何指定文件结尾