在我创业的一个项目中,为了节约网络带宽,因此在网络中传输数据需要实现紧凑存取,在国防,科研,航天,军工等多个领域其实也有类似的需求。
实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取。比如一个字节,我们可以存储8个bool信息,废话少说,直接分享代码(备注:里面的代码算法值得优化)。
//以下为函数定义
/***********************************************************************/
/* 函数作用:从buffer读一个位 */
/* 参数pBuffer[in]:指定buffer */
/* 参数nStart[in]:指定位置 */
/* 参数nEnd[out]:返回结束位置 */
/* 参数retByte[out]:返回读取结果值 */
/* 返回:void */
/***********************************************************************/
void ReadOneBit( byte* pBuffer, int nStart, /* out */int& nEnd, /* out */ byte& retByte );
/***********************************************************************/
/* 函数作用:从指定buffer里读任意一段位置数据 */
/* 参数pBuffer[in]:指定buffer */
/* 参数nStart[in]:指定位置 */
/* 参数btLength[in]:读取长度 */
/* 参数nEnd[out]:返回结束位置 */
/* 参数retData[out]:返回读取结果值,支持任意数据类型 */
/* 返回:void */
/***********************************************************************/
template
void ReadDataFromBuffer( byte* pBuffer, int nStart, byte btLength, /* out */int& nEnd, /* out */ T& retData );
/*****************************************