在存储数据的时候,我们大部分的时候都是在存储数字。如何高效且用最少的字节的来存储这是个有很多技巧的问题。
现总结些经验如下.
一, 定长存储,就是每个值用等长的字节数来存储。这种方法是显而易见的。
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);