亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

如何在C++中實現按位存取

2020-01-26 15:00:59
字體:
來源:轉載
供稿:網友

在我創業的一個項目中,為了節約網絡帶寬,因此在網絡中傳輸數據需要實現緊湊存取,在國防,科研,航天,軍工等多個領域其實也有類似的需求。
實現緊湊存取,不是按一個字節一個字節地存取,而是按位存取。比如一個字節,我們可以存儲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 ); 


//以下為函數實現

void ReadOneBit( byte* pBuffer, int nStart, /* out */int& nEnd, /* out */ byte& retByte ) {   byte btData = pBuffer[nStart/8];   btData = btData << nStart%8;   retByte = btData >> 7;   nEnd = nStart+1; }  template<typename T> void ReadDataFromBuffer( byte* pBuffer, int nStart, byte btLength, /* out */int& nEnd, /* out */ T& retData ) {   //順序讀位   retData = 0;   if ( btLength > sizeof(T)*8 )     return ;      byte btData;   T tData;   while ( btLength-- )   {     ReadOneBit(pBuffer, nStart, nStart, btData);     tData = btData << btLength;     retData |= tData;   }      nEnd = nStart; }  void ReadStringFromBuffer( byte* pBuffer, int nStart, int nCount, /* out */int& nEnd, /* out */char* pRetData ) {   for ( int nIndex=0; nIndex<nCount; nIndex++ )   {     ReadDataFromBuffer(pBuffer, nStart, 8, nStart, pRetData[nIndex]);   }   nEnd = nStart; }   void WriteOneBit( byte* pBuffer, byte btData, int nStart, /* out */int& nEnd ) {   int nSet = nStart / 8;   byte c = pBuffer[nSet];   switch ( btData )   {   case 1:     c |= ( 1 << (7- nStart % 8) );     break;   case 0:     c &= ( ~(1 << (7- nStart % 8) ) );     break;   default:     return;   }   pBuffer [nSet] = c;   nEnd = nStart +1; }    template<typename T> void WriteDataToBuffer( byte* pBuffer, T tData, int nStart, byte btLength, /* out */int& nEnd ) { /* //大端機模式   byte btDataLength = sizeof(T);   if ( btLength > sizeof(T)*8 )     return;      int nDataStart = 0; //數據的第一位位置為0,順序寫入   while ( btLength-- )   {     byte bitData;     ReadOneBit((byte*)&tData, nDataStart, nDataStart, bitData);     WriteOneBit(pBuffer, bitData, nStart, nStart);   }      nEnd = nStart; */    //小端機模式:寫buffer的時候,不能順序寫位    //獲得模版占用字節大小   byte btDataLength = sizeof(T);    //校驗長度是否越界   if ( btLength > sizeof(T)*8 )     return;    //將待寫數據轉為byte*   byte* ptData = (byte*)&tData;     //求模與余   int nSet = btLength / 8;   int nRin = btLength % 8;      //定義字節數據與位數據   byte bitData;   byte byteData;   int nTempEnd;    //先寫rin數據   byteData = ptData[nSet];   while ( nRin-- )   {     ReadOneBit(&byteData, 7-nRin, nTempEnd, bitData);     WriteOneBit(pBuffer, bitData, nStart, nStart);   }    //再寫Set數據   while ( nSet )   {     byteData = ptData[--nSet];     //寫一個byte     int i=0;     while ( i!=8 )     {       ReadOneBit(&byteData, i++, nTempEnd, bitData);       WriteOneBit(pBuffer, bitData, nStart, nStart);     }   }   nEnd = nStart;  }   void WtriteStringToBuffer( byte* pBuffer, char* pchar, int nStart, int nCount, /* out */int& nEnd ) {   for ( int nIndex=0; nIndex<nCount; nIndex++ )   {     WriteDataToBuffer(pBuffer, pchar[nIndex], nStart, 8, nStart);   }   nEnd = nStart; } 

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
九九九热精品免费视频观看网站| 国产精品欧美日韩| 国产999精品视频| 欧美体内谢she精2性欧美| 久久九九免费视频| 久久久久久久国产精品| 亚洲精品一区二区久| 久久久精品中文字幕| 欧美成人精品不卡视频在线观看| 国产精品自产拍高潮在线观看| 欧美日韩亚洲视频一区| 精品日韩中文字幕| 日韩欧美在线网址| 精品视频在线观看日韩| 在线播放国产一区中文字幕剧情欧美| 国产精品福利久久久| 国产亚洲激情在线| 成人激情在线观看| 亚洲精品久久久一区二区三区| 日韩成人激情影院| 国内精品中文字幕| 亚洲白虎美女被爆操| 久久精品人人做人人爽| 久久福利网址导航| 国产91露脸中文字幕在线| 欧美大片大片在线播放| 69国产精品成人在线播放| 欧美成人激情视频免费观看| 成人免费观看a| 国产一区二区三区日韩欧美| 国产午夜精品一区理论片飘花| 中文字幕亚洲一区二区三区五十路| 日韩欧美国产成人| 国产欧美欧洲在线观看| 亚洲网在线观看| 欧美另类xxx| 久久成人在线视频| 久久av在线播放| 成人亚洲综合色就1024| 北条麻妃久久精品| 97精品国产aⅴ7777| 91av在线视频观看| 亚洲一区二区中文| 亚洲精品白浆高清久久久久久| 中文字幕亚洲自拍| 欧美日本高清一区| 国产女人18毛片水18精品| 亚洲tv在线观看| 亚洲一区二区三区视频| 久久久亚洲欧洲日产国码aⅴ| 国产一区二区在线免费视频| 国产精品久久久亚洲| 欧美专区在线观看| 国产日本欧美一区二区三区在线| 国产激情久久久| 亚洲加勒比久久88色综合| 亚洲电影中文字幕| 2018日韩中文字幕| 日韩免费高清在线观看| 亚洲毛片在线看| 九色精品美女在线| 久久久国产精品亚洲一区| 国产99久久精品一区二区| 亚洲精品成人久久| 欧美乱大交xxxxx另类电影| 国产精品久久久久福利| 欧美激情国产日韩精品一区18| 欧美日韩一二三四五区| 国产日韩精品一区二区| 97免费视频在线播放| 国产91亚洲精品| 亚洲精品99久久久久| 日韩在线欧美在线国产在线| 亚洲精品国产免费| 丝袜一区二区三区| 亚洲老头老太hd| 中文字幕在线视频日韩| 欧美黑人巨大精品一区二区| 国产精品69精品一区二区三区| 欧美香蕉大胸在线视频观看| 国产极品精品在线观看| 日韩精品久久久久久福利| 色综合老司机第九色激情| 91亚洲精品一区二区| 久热精品视频在线观看一区| 亚洲无线码在线一区观看| 成人在线观看视频网站| 久久亚洲国产成人| 亚洲性无码av在线| 亚洲a级在线观看| 国内精品视频久久| 欧美日韩中文字幕在线视频| 国产精品久久久久久久9999| 91高潮精品免费porn| 国产激情综合五月久久| 亚洲成人av片在线观看| 视频直播国产精品| 57pao成人国产永久免费| 久久综合久久美利坚合众国| 岛国视频午夜一区免费在线观看| 国语自产精品视频在线看抢先版图片| 国产91免费观看| 国产精品久久久久久久av大片| 在线观看欧美日韩国产| 欧美午夜精品久久久久久人妖| 亚洲直播在线一区| 亚洲男人天堂2024| 国产欧美一区二区三区久久人妖| 日韩人体视频一二区| 欧美精品videossex88| 亚洲精品v欧美精品v日韩精品| 91精品免费看| 91亚洲国产精品| 亚洲国模精品私拍| 欧美日韩国内自拍| 国产精品久久97| 亚洲美腿欧美激情另类| 清纯唯美亚洲激情| 日韩在线视频二区| 亚洲精品999| 国产精品入口福利| 亚洲欧美日韩天堂一区二区| 日韩性xxxx爱| 成人两性免费视频| 国产精品视频一区国模私拍| 欧美性猛交xxxx黑人| 日韩中文字幕久久| 久久亚洲欧美日韩精品专区| 国产精品444| 国产精品视频xxxx| 茄子视频成人在线| 日韩中文字幕在线视频| 日韩大胆人体377p| 国产小视频国产精品| 欧美日韩午夜视频在线观看| www高清在线视频日韩欧美| 亚洲国产精品电影| 亚洲男人第一av网站| 久久久免费高清电视剧观看| 成人在线视频网| 成人高清视频观看www| 蜜臀久久99精品久久久久久宅男| 亚洲国产免费av| 日韩精品极品在线观看播放免费视频| 国产日韩欧美成人| 国产美女精品视频免费观看| 久久天天躁狠狠躁夜夜av| 国产精品午夜一区二区欲梦| 久久91精品国产91久久久| 久久精品国产v日韩v亚洲| 精品视频在线导航| 色偷偷av一区二区三区| 69av在线视频| 久久精品国产精品| 成人午夜高潮视频| 日韩av在线播放资源| 国产精品免费久久久久影院| 亚洲精品国产精品乱码不99按摩| 欧美成人一区二区三区电影| 久久久久在线观看| 日韩精品有码在线观看| 亚洲free性xxxx护士hd| 亚洲午夜av久久乱码| 日韩高清av在线|