Protocol Buffer 四 整数序列化

本文介绍了Protocol Buffer中用于正整数序列化的varints技术,强调其节省空间的优势,并提及由于varints对负整数处理效率低,因此引入了ZigZag编码来优化负整数的序列化过程。同时提到,只有在使用sint32或sint64类型时,Protocol Buffer编译器才会应用ZigZag编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

varints用于正整数 (无符号整数)

varints 是 一个很不错的技术。将一个整数序列化成1或者多个字节。想起以前我们总是使用4字节表示整数,真的很浪费啊。只有真正追求完美的人才会重视每个细节。

我的本篇介绍是https://developers.google.com/protocol-buffers/docs/encoding中的Base 128 Varints一节的逆过程。这么好的站点被墙了,幸好我有VPN。



规则:

1.如果整数可以用一个字节表示,不要改变它
2.否则,用上面的4步序列化
3.每个字节最高位叫msb(most significant bit),1表示后面有字节,0表示后面没有字节。


ZigZag用于负整数(有符号的整数)

但是这种varints encoding算法用来处理负数是不合适的。因为它会把负数当作很大的正数,从而通常序列化成10字节。显然效率比较低。

遇到负数的时候,应该采用另一种encoding算法。


如果是32位符号负整数,用

(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值