> 文档中心 > Protobuf 介绍与实战50:Varint 正数编码过程、负数编码过程、解码过程介绍

Protobuf 介绍与实战50:Varint 正数编码过程、负数编码过程、解码过程介绍

1  go grpc-go 相关技术专栏 总入口

2  Protobuf介绍与实战 图文专栏 文章目录

1、Varint编码方式,适合的场景?

适合对正数进行编码

不适合负数

2、正数的Varint编码过程,如下(举个例子说明)

假设传输的是1029,类型为int32

在这里插入图片描述

int32类型的1029,如果使用Varint编码的话,

在64位操作系统下,需要使用4个字节传输,其中2个字节是无需的;

使用Varint编码后,只需要2个字节传输即可。

下面是1029为uint32类型时的情况:

在这里插入图片描述

3、负数的Varint编码过程:

假设对-129进行Varint编码,类型为int64位

传输-129,需要8个字节

3.1、第1步:计算出-129的补码

在这里插入图片描述

3.2、第2步:对-129的补码,进行Varint编码

在这里插入图片描述

3.3、验证

在这里插入图片描述

发现了没,-129用Varint编码后,居然需要10个字节;

这跟我们的初衷是违背的。

我们用Varint编码的目的是,希望节省字节的;

看来,Varint编码不适用于负数场景。

那么,为了解决负数的场景,在Varint的基础上,增加了ZigZag编码。

ZigZag编码方式,下文再详细介绍。

4、Varint编码的解码过程?

主要解码过程:(就是编码的反过程而已)

在这里插入图片描述

Protobuf 介绍与实战50:Varint 正数编码过程、负数编码过程、解码过程介绍 与50位技术专家面对面 Protobuf 介绍与实战50:Varint 正数编码过程、负数编码过程、解码过程介绍 20年技术见证,附赠技术全景图