一个int类型整数在计算机内由4个字节存储,表示的范围是0~2^32,而实际上,如果一个系统中,用到的整数的范围都比较小,高位补0的那些字节是否有些浪费了?比如int型整数128,它在计算机内的存储为0000 0000 0000 0000 0000 0000 1000 0000,有三个字节是补的0。怎么样来对这样的数据进行压缩存储了? 压缩之后,又怎么来进行读取了?
来看下tokyo cabinet中是怎么样处理的:
它取出整数中的有效字节存储在目标字节序列里.
例如:int型整数128,有效字节为最后一个字节1000 0000, 先取后7位值, 将其变为负数,存储到目标字节序列里, 然后将1000 0000 右移7位,重复以上操作.于是int型整数128的实际存储就只需要2 bytes空间.
完整实现代码如下:
1。压缩存储整数
注意:-TC_rem -1 操作是为了将正数变为负数(因为有可能存在0)
2。读取压缩后的整数
注意:(TC_buf[_TC_i] + 1) * -1 是为了还原成正数
简单测试:
代码:
结果: