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 来写入二进制数据,但我需要实际声明,我想写入的文件是二进制的。非常感谢大家的帮助和建议。
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 来写入二进制数据,但我需要实际声明,我想写入的文件是二进制的。非常感谢大家的帮助和建议。