无法找到 Protobuf Unmarshal 错误的解决方案
Cannot Find Solutions to a Protobuf Unmarshal Error
我在解组二进制 protobuf 消息时收到以下错误 "unmarshaling error: proto: cannot parse reserved wire type"。
newMessage := &MessageName{}
err = proto.Unmarshal(data, newMessage)
这是我从 Protobuf 二进制文件中读取的数据,其内容类似于此处给出的二进制格式 -> What does the protobuf text format look like?
读取文件并存储到数据后,数据看起来像这样 [23 67 102 56 ... ]
如何解决这个错误?
[23 67 102 56 ... ]
看起来像一片整数,我假设整数是字节值。如果这是真的,这不是 protobuf 流!
查看 protobuf docs,第一个字节始终是 varint 键。这由字段编号(前 5 位)和线类型(后 3 位)组成。你的 23 整数看起来像这样:
0001 0111
^ ^
varint wiretype
文档中显示了有效的电线类型。您的二进制值 111
是十进制值 7
,这不是列出的类型之一。因此:cannot parse reserved wire type
Type Meaning Used For
0 Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum
1 64-bit fixed64, sfixed64, double
2 Length-delimited string, bytes, embedded messages, packed repeated fields
3 Start group groups (deprecated)
4 End group groups (deprecated)
5 32-bit fixed32, sfixed32, float
我在解组二进制 protobuf 消息时收到以下错误 "unmarshaling error: proto: cannot parse reserved wire type"。
newMessage := &MessageName{}
err = proto.Unmarshal(data, newMessage)
这是我从 Protobuf 二进制文件中读取的数据,其内容类似于此处给出的二进制格式 -> What does the protobuf text format look like?
读取文件并存储到数据后,数据看起来像这样 [23 67 102 56 ... ]
如何解决这个错误?
[23 67 102 56 ... ]
看起来像一片整数,我假设整数是字节值。如果这是真的,这不是 protobuf 流!
查看 protobuf docs,第一个字节始终是 varint 键。这由字段编号(前 5 位)和线类型(后 3 位)组成。你的 23 整数看起来像这样:
0001 0111
^ ^
varint wiretype
文档中显示了有效的电线类型。您的二进制值 111
是十进制值 7
,这不是列出的类型之一。因此:cannot parse reserved wire type
Type Meaning Used For
0 Varint int32, int64, uint32, uint64, sint32, sint64, bool, enum
1 64-bit fixed64, sfixed64, double
2 Length-delimited string, bytes, embedded messages, packed repeated fields
3 Start group groups (deprecated)
4 End group groups (deprecated)
5 32-bit fixed32, sfixed32, float