Protobuf illegal Wire type

本秂侑毒 提交于 2019-12-11 10:18:39

问题


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

I get this message when I try to decode my binary file with protobuf.

vert.proto:

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

and in cpp i just put in a lot of raw data in the form of x,y,z,stress,strain ... and so on which are all floats and when I try to decode it on javascript side I get this weird message, it was working fine until we changed the input data, and now I don't know where to look for the fixing.

for references here my cpp code:

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);
}

回答1:


So finally I figured it out! The problem was outside the code I posted ! I only set up an Ostream to write the binary data into, but instead I needed to actually state, that the file I want to write in is binary. So thank you all for your help and advice.




回答2:


It looks like you're serializing the field as if it's not packed. Are you using an older version of the proto to serialize your data?

Wire type 5 is a 32-bit fixed-width field (fixed32, sfixed32, or float), which would match repeated float values = 1. Wire type 2 is a length-delimited field (string, bytes, message, or packed repeated field), which matches what's in the proto you posted (repeated float values = 1 [packed = true]).



来源:https://stackoverflow.com/questions/35204572/protobuf-illegal-wire-type

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!