0
点赞
收藏
分享

微信扫一扫

Protobuf 介绍与实战53:在proto文件中,数据类型为fixed64,sfixed64,double时,变量值采用何种方式编码(64-bit)

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

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

当数据类型为fixed64,sfixed64,double时,变量值采用的是64-bit编码方式;即固定占用8个字节传输。

无论你传输的数是大数,还是小数(如1)。固定消耗8个字节。

因此,64-bit编码方式使用的场景?

如果某些值经常是大数的话,可以使用64-bit编码方式;

因为,Varint不适合负数编码,不适合大数编码。

(Varint编码,每个字节的第1个bit是符号位,从另外一个角度看,就是浪费了1个bit,因此,Varint编码适合数值比较小的场景,如小于128)

1、当数据类型为fixed64时,如何编码?(固定占用8字节,适合数值比较大的场景)

在这里插入图片描述

在这里插入图片描述

如果数值比 2^56 大的话,64-bit 这个类型比 uint64 高效,如果数值比 2^28 大的话,32-bit 这个类型比 uint32 高效
参考网址
https://www.jianshu.com/p/73c9ed3a4877?share_token=6ed3cde5-2419-4a9e-98f9-2743f7f0e70f

fixed32类型,不再解释了。原理一样。

2、当数据类型为sfixed64时,如何编码?(固定占用8字节,适合负数绝对值比较大的场景)

sfixed64,针对的是负数场景。

如果负数的绝对值比较小的话,使用sfixded 是浪费的,不划算。

在这里插入图片描述

在这里插入图片描述

sfixed32类型,不再介绍了,原理一样。

数据类型为double时,固定占用8个字节;具体不研究了,没太搞懂。
float,不再具体研究了。

举报

相关推荐

0 条评论