zigzag负整数压缩编码,我看protof 里面描述是T-L,前面有tag表示是int还是什么,有多长。但是解码的时候,不需要前面的tag也能完成解压啊,比如两个8字节,第一个首字节是1,第二个首字节是0,那就说明这是个2字节长的数字了。
那么它前面的tag位的作用是什么。防止传输出错吗?
引用 皆我百晓生 小程序回复内容作答:
在zigzag负整数压缩编码中,使用了varint编码方式将有符号整数转换为无符号整数,并进行压缩。在protobuf中,使用tag和长度信息来描述编码的内容,以方便解码和识别字段的类型。
tag位主要用于指示编码的字段类型和长度。它包含了两个部分:字段号和字段类型。字段号用于标识编码数据的含义,而字段类型用于表示字段的数据类型(例如,int32、int64等)。通过tag位,解码器可以快速识别并正确解析编码数据。如果没有tag位,解码的时候可能会发生错误,比如解码器无法判断字段的类型、长度等信息。
此外,tag位还可以用于版本控制和向后兼容性。如果要对消息格式进行更改,可以通过添加、删除或修改tag位来实现,这样可以保持向后兼容性,已经使用老版本消息格式的解码器仍然可以正确解析新版本的消息。
总结起来,tag位在zigzag负整数压缩编码中的作用主要包括两个方面:确保解码器可以正确解析编码数据,以及提供版本控制和向后兼容性。