猿问

无法找到 Protobuf Unmarshal 错误的解决方案

在解组二进制 protobuf 消息时,我收到以下错误“解组错误:proto:无法解析保留的线类型”。


newMessage := &MessageName{}

err = proto.Unmarshal(data, newMessage)

这里是我从 Protobuf 二进制文件中读取的数据,其内容类似于此处给出的二进制格式 -> protobuf 文本格式是什么样的?


读取文件并存储在数据中后,数据看起来像这样 [23 67 102 56 ... ]


如何修复此错误?


翻阅古今
浏览 97回答 1
1回答

噜噜哒

[23 67 102 56 ... ]看起来像一片整数,我假设整数是字节值。如果这是真的,这不是 protobuf 流!查看protobuf 文档,第一个字节始终是 varint 键。这由字段编号(前 5 位)和线路类型(后 3 位)组成。您的 int of 23 如下所示:  0001  0111  ^      ^  varint wiretype有效的电线类型显示在文档中。您的二进制值111是 decimal 7,这不是列出的类型之一。因此:cannot parse reserved wire typeType    Meaning             Used For0       Varint              int32, int64, uint32, uint64, sint32, sint64, bool, enum1       64-bit              fixed64, sfixed64, double2       Length-delimited    string, bytes, embedded messages, packed repeated fields3       Start group         groups (deprecated)4       End group           groups (deprecated)5       32-bit              fixed32, sfixed32, float
随时随地看视频慕课网APP

相关分类

Go
我要回答