Golang 小技巧:使用 binary.AppendUvarint 编码变长整数
【摘要】 在处理二进制协议时,如果直接用固定 8 字节保存 uint64,对于很多小数字来说会比较浪费空间。Go 的 encoding/binary 提供了变长整数编码:buf := make([]byte, 0)buf = binary.AppendUvarint(buf, 100)buf = binary.AppendUvarint(buf, 1000)数值越小,通常占用的字节数也越少。读取时可以...
在处理二进制协议时,如果直接用固定 8 字节保存 uint64,对于很多小数字来说会比较浪费空间。
Go 的 encoding/binary 提供了变长整数编码:
buf := make([]byte, 0)
buf = binary.AppendUvarint(buf, 100)
buf = binary.AppendUvarint(buf, 1000)
数值越小,通常占用的字节数也越少。
读取时可以使用:
value, n := binary.Uvarint(buf)
fmt.Println(value)
fmt.Println(n)
其中:
value是解析出来的整数n是本次读取占用的字节数
如果需要继续解析后面的数据,可以:
value, n := binary.Uvarint(buf)
buf = buf[n:]
小结
需要紧凑存储无符号整数时,可以使用:
buf = binary.AppendUvarint(buf, value)
它比较适合自定义二进制协议、消息编码、文件格式等场景。
相比固定长度整数编码,在大量小整数数据中可以节省一定的存储空间。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)