SQLite的可变长整数

可变长整数是SQLite的特色之一,使用它既可以处理大整数,又可以节省存储空间。由于单元中大量使用可变长整数,故在此先加以介绍。

可变长整数由1~9个字节组成,每个字节的低7位有效,第8位是标志位。在组成可变长整数的各字节中,前面字节(整数的高位字节)的第8位置1,只有最低一个字节的第8位置0,表示整数结束。

可变长整数可以不到9个字节,即使使用了全部9个字节,也可以将它转换为一个64-bit整数。

当可变长整数达到9个字节,第9个字节的第8位置不再是标志位,其8位均有效。

下面是一些可变长整数的例子:

0x00                             转换为 0x00000000

0x7f                              转换为 0x0000007f

0x81 0x00                  转换为  0x00000080

0x82 0x00                  转换为  0x00000100

0x80 0x7f                   转换为  0x0000007f

0x8a 0x91 0xd1 0xac0x78  转换为  0xa2345678

0x81 0x81 0x81 0x810x01  转换为  0x10204081

可变长整数可用于存储rowid、字段的字节数或Btree单元中的数据。


举例说明变换过程:

3字节整数:0xA1 0x94 0x56 先转换为二进制:

10100001 10010100 01010110

移除最高位变成:

0100001 0010100 1010110 <24位>=》 01000 01001010 01010110<21位>

转换成16进制:0x08 0x49 0x56

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值