Protobuf非法线材类型

时间:2016-02-04 15:08:05

标签: javascript c++ protocol-buffers

  

protobuf.min.js:63未捕获错误:字段的非法线路类型   Message.Field .Data_new.vert:5(预期2)

当我尝试用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);
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您似乎将该字段序列化,就好像它不是packed一样。您是否使用较旧版本的proto来序列化数据?

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