如何在如何在C++中实现按位存取中实现按位存取
实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取,本文就是介绍了如何在C++中实现按位存取,
需要的朋友可以参考下
在我创业的一个项目中,为了节约网络带宽,因此在网络中传输数据需要实现紧凑存取,在国防,科研,航天,军工等多个领
域其实也有类似的需求。
实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取。比如一个字节,我们可以存储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<typename T>
void ReadDataFromBuffer( byte* pBuffer, int nStart, byte btLength, /* out */int& nEnd, /* out */ T& retData );
/***********************************************************************/
/* 函数作用:从指定buffer里读取一段字符串 */
/* 参数pBuffer[in]:指定buffer */
/* 参数nStart[in]:指定位置 */
/* 参数nCount[in]:字符串长度 */
/* 参数nEnd[out]:返回结束位置 */
/* 参数pRetData[out]:返回读取字符串结果 */
/* 返回:void */
/***********************************************************************/
void ReadStringFromBuffer( byte* pBuffer, int nStart, int nCount, /* out */int& nEnd, /* out */char* pRetData );
/***********************************************************************/
/* 函数作用:向buffer写一个位 */
/* 参数pBuffer[in]:指定buffer */
/* 参数btData[in]:需要写入的值 */
/* 参数nStart[in]:指定位置 */
/* 参数nEnd[out]:返回结束位置 */
/* 返回:void */
/***********************************************************************/
void WriteOneBit( byte* pBuffer, byte btData, int nStart, /* out */int& nEnd );
/***********************************************************************/
/* 函数作用:向指定buffer里写入任意一段数据 */
/* 参数pBuffer[in]:指定buffer */
/* 参数tData[in]:需要写入的数据,支持任意数据类型 */
/* 参数nStart[in]:指定位置 */
/* 参数btLength[in]:读取长度 */
/* 参数nEnd[out]:返回结束位置 */
/* 返回:void */
/***********************************************************************/
template<typename T>
void WriteDataToBuffer( byte* pBuffer, T tData, int nStart, byte btLength, /* out */int& nEnd );
/***********************************************************************/
/* 函数作用:向指定buffer里写取一段字符串 */
/* 参数pBuffer[in]:指定buffer */
/* 参数pchar[in]:需要写入的字符串 */
/* 参数nStart[in]:指定位置 */
/* 参数nCount[in]:字符串长度 */
/* 参数nEnd[out]:返回结束位置 */
/* 返回:void */
/***********************************************************************/