sxp*_*sxp 5 go protocol-buffers unmarshalling proto
在解组二进制 protobuf 消息时,出现以下错误“解组错误:原型:无法解析保留的线路类型”。
newMessage := &MessageName{}
err = proto.Unmarshal(data, newMessage)
Run Code Online (Sandbox Code Playgroud)
这里是我从 Protobuf 二进制文件中读取的数据,其内容类似于此处给出的二进制格式 -> protobuf 文本格式是什么样的?
读取文件并存储在数据后,数据看起来像这样 [23 67 102 56 ... ]
如何修复这个错误?
[23 67 102 56 ... ]看起来像一个整数切片,我假设整数是字节值。如果这是真的,那么这不是一个 protobuf 流!
查看protobuf 文档,第一个字节始终是 varint 键。它由字段号(前 5 位)和线路类型(后 3 位)组成。你的 23 的整数看起来像这样:
0001 0111
^ ^
varint wiretype
Run Code Online (Sandbox Code Playgroud)
文档中显示了有效的电线类型。您的二进制值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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14325 次 |
| 最近记录: |