为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
翻阅古今 2022-06-06 15:51:23
在解组二进制 protobuf 消息时,我收到以下错误“解组错误:proto:无法解析保留的线类型”。newMessage := &MessageName{}err = proto.Unmarshal(data, newMessage)这里是我从 Protobuf 二进制文件中读取的数据,其内容类似于此处给出的二进制格式 -> protobuf 文本格式是什么样的?读取文件并存储在数据中后,数据看起来像这样 [23 67 102 56 ... ]如何修复此错误?
查看完整描述

1 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

[23 67 102 56 ... ]看起来像一片整数,我假设整数是字节值。如果这是真的,这不是 protobuf 流!


查看protobuf 文档,第一个字节始终是 varint 键。这由字段编号(前 5 位)和线路类型(后 3 位)组成。您的 int of 23 如下所示:


  0001  0111

  ^      ^

  varint wiretype

有效的电线类型显示在文档中。您的二进制值111是 decimal 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


查看完整回答
反对 回复 2022-06-06
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信