Protobuf 非法 Wire 类型

Protobuf illegal Wire type

protobuf.min.js:63 Uncaught Error: Illegal wire type for field Message.Field .Data_new.vert: 5 (2 expected)

当我尝试使用 protobuf 解码我的二进制文件时收到此消息。

vert.proto:

message Vertice_new{
    repeated float values = 1 [packed = true];
}
message Data_new{
    repeated Vertice_new vert = 1;
}

在 cpp 中,我只是以 x、y、z、压力、应变等形式输入大量原始数据,这些都是浮点数,当我尝试在 javascript 我收到了一条奇怪的消息,在我们更改输入数据之前它工作正常,现在我不知道在哪里寻找修复。

在这里参考我的 cpp 代码:

Data_new data_new;
for ... loopparameter is i ;  {  
    vert->add_values(nodes[i].pos.x + diffs[i].pos.x);
    vert->add_values(nodes[i].pos.y + diffs[i].pos.y);
    vert->add_values(nodes[i].pos.z + diffs[i].pos.z);
    vert->add_values(nodes[i].directStress.x);
    vert->add_values(nodes[i].directStress.z);
    vert->add_values(nodes[i].directStrain.x);
    vert->add_values(nodes[i].directStrain.z);
}

您似乎正在序列化该字段,就好像它不是 packed。您是否使用旧版本的原型来序列化您的数据?

线类型 5 是一个 32 位固定宽度字段(fixed32、sfixed32 或 float),它将匹配 repeated float values = 1。类型 2 是长度分隔的字段(字符串、字节、消息或打包的重复字段),它与您发布的原型中的内容相匹配 (repeated float values = 1 [packed = true])。

所以我终于明白了!问题出在我发布的代码之外!我只设置了一个 Ostream 来写入二进制数据,但我需要实际声明,我想写入的文件是二进制的。非常感谢大家的帮助和建议。