乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一種整數(shù)數(shù)據(jù)壓縮存儲(chǔ)的算法實(shí)現(xiàn)

       Fredanf 2013-01-23

      一種整數(shù)數(shù)據(jù)壓縮存儲(chǔ)的算法實(shí)現(xiàn)

      對(duì)于32位的機(jī)器,INT整形占四個(gè)字節(jié),這意味著如果我們要保存一個(gè)INT類型數(shù)據(jù)需要占用4個(gè)字節(jié)空間,但實(shí)際的情況是4個(gè)字節(jié)的空間中并非所有的空間都保存了有效的數(shù)據(jù)位,比如整數(shù)1,在內(nèi)存中以0x00000001表示,實(shí)際只有最低位表示了實(shí)際數(shù)據(jù),通過實(shí)現(xiàn)一個(gè)整形的壓縮算法可以有效的減少存儲(chǔ)空間的使用。

      1:在一個(gè)字節(jié)數(shù)據(jù)中只保存7bit有效數(shù)據(jù),第8位作為一個(gè)INT數(shù)據(jù)是否表示完成的指示位(1表示未完成,0表示已經(jīng)完成)。

      2:通過判斷字節(jié)的最高BIT位是否為0來獲取一個(gè)INT型數(shù)據(jù),這樣我們可以通過1-5個(gè)字節(jié)數(shù)據(jù)來表示一個(gè)INT型。

      3:數(shù)據(jù)轉(zhuǎn)換通過去除每個(gè)字節(jié)的指示位,其它bit數(shù)據(jù)拼接構(gòu)成INT數(shù)據(jù)。


      一個(gè)例子:0x81 存在8個(gè)有效的數(shù)據(jù)位,由于算法中1個(gè)字節(jié)表示7BIT數(shù)據(jù),我們只需要2個(gè)字節(jié)來表示該數(shù)據(jù),轉(zhuǎn)換后的數(shù)據(jù)表示為:1000 0001 0000 0001,第一個(gè)字節(jié)最高位為1,第二個(gè)字節(jié)最高位為0,表明存在2個(gè)字節(jié)表示該INT型,去除數(shù)據(jù)指示位,獲取到數(shù)據(jù)000 0001 000 0001,轉(zhuǎn)換為0X81.

       

      復(fù)制代碼
      typedef struct TRANS_S TRANS_T;
      struct TRANS_S
      {
          int len;
          unsigned char buff[0];
      };
      
      int getTransLen(unsigned int value)
      {
          if(0 <= value && value<= 0x7F)
          {
              return 1;
          }
          if(0x80 <= value && value <= 0x3FFF)
          {
              return 2;
          }
          if(0x4000 <= value && value <= 0x1FFFFF)
          {
              return 3;
          }
          if(0x200000 <= value && value<= 0x0FFFFFFF)
          {
              return 4;
          }
          return 5;
      }
      
      void intTrans(unsigned int value, TRANS_T** ppBuff)
      {
          int len = -1;
          int temp = 0;
          TRANS_T* pBuff = NULL;
          
          len = getTransLen(value);
          pBuff = (TRANS_T*)malloc(sizeof(TRANS_T) + len);
          pBuff->len = len;
          temp = value;
      
          for (int i=0;i<len;i++)
          {
              pBuff->buff[i] = temp&0x7F;
              pBuff->buff[i] |= 0x80;
              temp >>= 7;
          }
      
          pBuff->buff[0] &= 0x7F;
      
          *ppBuff = pBuff;
      
          return;
      }
      復(fù)制代碼

      通過使用數(shù)據(jù)壓縮算法,我們對(duì)于很少的一部分大整數(shù)需要5個(gè)字節(jié)表示,但對(duì)于絕大部分的數(shù)據(jù)都可以進(jìn)行壓縮存儲(chǔ),對(duì)于存在大量數(shù)據(jù)的存儲(chǔ)的應(yīng)用可以有效的節(jié)省存儲(chǔ)空間。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多