如何压缩存储数字

在存储数据的时候,我们大部分的时候都是在存储数字。如何高效且用最少的字节的来存储这是个有很多技巧的问题。

现总结些经验如下.

一,  定长存储,就是每个值用等长的字节数来存储。这种方法是显而易见的。

       1,确定存储的数的最大值,确定用多少个字节就可以存储。比如存储的数值最大不会超过256,这是用1个字节来存储将是最划算。如果最大值不会超过0xFFFFFF,用3个字节存储最划算。

       2,当用多字节来存储的时候,固定的字节流顺序存储可以解决大端小端对齐不一致问题,强烈提醒不要直接把一个int型写到文件存储,除非你保证一辈子都不关心大端小端对齐问题。比如存储3个字节长度的数值代码:

static  void pack_uint24(UINT8 *addr, UINT32 u24 )
{
    assert(u24 <= 0xFFFFFF);
    addr[0] = (u24 >>  0) & 0xFF;
    addr[1] = (u24 >>  8) & 0xFF;
    addr[2] = (u24 >> 16) & 0xFF;
}

即总是先存储低字节,后存储高字节。解析的时候代码:

static  UINT32 unpack_uint24( const UINT8 addr[3]  )
{
    return ((UINT32)addr[0] <<  0) |
        ((UINT32)addr[1] <<  8) |
        ((UINT32)addr[2] << 16);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值