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                                                           */ /***********************************************************************/ void WtriteStringToBuffer( byte* pBuffer, char* pchar, int nStart,  int nCount, /* out */int& nEnd  );  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzjjw.html