青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

kenlistian

厚積薄發. 勤為槳,思為帆

   :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理 ::
  73 隨筆 :: 4 文章 :: 22 評論 :: 0 Trackbacks

Base64 編碼和解碼,

說到Base64編碼和解碼,不過就是把3個字節進行處理后放置到4個字節空間。其原理就是:

    待編碼數據,以3個字節為單位,依次取6位數據并在前面補上兩個0形成新的8位編碼,

由于3*8=4*6,這樣3個字節的輸入會變成4個字節的輸出,長度上增加了1/3。

    以上處理存在著字符不是可見字符,故需制定了一個編碼表來轉換。碼表大小為2^6=64,故稱之Base64。

                            Base64編碼表

      Value Encoding  Value Encoding  Value Encoding  Value Encoding
           0 A            17 R            34 i            51 z
           1 B            18 S            35 j            52 0
           2 C            19 T            36 k            53 1
           3 D            20 U            37 l            54 2
           4 E            21 V            38 m            55 3
           5 F            22 W            39 n            56 4
           6 G            23 X            40 o            57 5
           7 H            24 Y            41 p            58 6
           8 I            25 Z            42 q            59 7
           9 J            26 a            43 r            60 8
          10 K            27 b            44 s            61 9
          11 L            28 c            45 t            62 +
          12 M            29 d            46 u            63 /
          13 N            30 e            47 v
          14 O            31 f            48 w         (填充符pad) =
          15 P            32 g            49 x
          16 Q            33 h            50 y

摘錄處理代碼如下:

注意的是,一般在vc下編程漢字編碼都是ansi,如果用到unicon or utf-8的話,注意其細節編碼的處理。

可能考慮用以WideCharToMultiByte來處理。以下編碼則是在ansi編碼原則下的源碼。

  1 const  char EnBase64Tab[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  2 const  char DeBase64Tab[] =
  3 {
  4     000000000000000000000000,
  5     0000000000000000000,
  6     62,        // '+'
  7     000,
  8     63,        // '/'
  9     52535455565758596061,        // '0'-'9'
 10     0000000,
 11     0123456789101112,
 12     13141516171819202122232425,        // 'A'-'Z'
 13     000000,
 14     26272829303132333435363738,
 15     39404142434445464748495051,        // 'a'-'z'
 16 };
 17 
 18 int   EncodeBase64(const unsigned char* pSrc, char* pDst, int nSrcLen)
 19 {
 20     unsigned char c1, c2, c3;    // 輸入緩沖區讀出3個字節
 21     int nDstLen = 0;             // 輸出的字符計數
 22     int nLineLen = 0;            // 輸出的行長度計數
 23     int nDiv = nSrcLen / 3;      // 輸入數據長度除以3得到的倍數
 24     int nMod = nSrcLen % 3;      // 輸入數據長度除以3得到的余數
 25     // 每次取3個字節,編碼成4個字符
 26     for (int i = 0; i < nDiv; i ++)
 27     {
 28         // 取3個字節
 29         c1 = *pSrc++;
 30         c2 = *pSrc++;
 31         c3 = *pSrc++;
 32         // 編碼成4個字符
 33         *pDst++ = EnBase64Tab[c1 >> 2];
 34         *pDst++ = EnBase64Tab[((c1 << 4| (c2 >> 4)) & 0x3f];
 35         *pDst++ = EnBase64Tab[((c2 << 2| (c3 >> 6)) & 0x3f];
 36         *pDst++ = EnBase64Tab[c3 & 0x3f];
 37         nLineLen += 4;
 38         nDstLen += 4;
 39     }
 40     // 編碼余下的字節
 41     if (nMod == 1)
 42     {
 43         c1 = *pSrc++;
 44         *pDst++ = EnBase64Tab[(c1 & 0xfc>> 2];
 45         *pDst++ = EnBase64Tab[((c1 & 0x03<< 4)];
 46         *pDst++ = '=';
 47         *pDst++ = '=';
 48         nLineLen += 4;
 49         nDstLen += 4;
 50     }
 51     else if (nMod == 2)
 52     {
 53         c1 = *pSrc++;
 54         c2 = *pSrc++;
 55         *pDst++ = EnBase64Tab[(c1 & 0xfc>> 2];
 56         *pDst++ = EnBase64Tab[((c1 & 0x03<< 4| ((c2 & 0xf0>> 4)];
 57         *pDst++ = EnBase64Tab[((c2 & 0x0f<< 2)];
 58         *pDst++ = '=';
 59         nDstLen += 4;
 60     }
 61     // 輸出加個結束符
 62     *pDst = '\0';
 63     return nDstLen;
 64 }
 65 
 66 //Base64解碼方法中,最簡單的也是查表法:將64個可打印字符的值作為索引,查表得到的值(范圍為0-63)依次連起來,
 67 
 68 //拼湊成字節形式輸出,就得到解碼結果。
 69 int   DecodeBase64(const char* pSrc, unsigned char* pDst, int nSrcLen)
 70 {
 71     int nDstLen;            // 輸出的字符計數
 72     int nValue;             // 解碼用到的長整數
 73     int i;
 74     i = 0;
 75     nDstLen = 0;
 76     // 取4個字符,解碼到一個長整數,再經過移位得到3個字節
 77     while (i < nSrcLen)
 78     {
 79         if (*pSrc != '\r' && *pSrc!='\n')
 80         {
 81             nValue = DeBase64Tab[*pSrc++<< 18;
 82             nValue += DeBase64Tab[*pSrc++<< 12;
 83             *pDst++ = (nValue & 0x00ff0000>> 16;
 84             nDstLen++;
 85             if (*pSrc != '=')
 86             {
 87                 nValue += DeBase64Tab[*pSrc++<< 6;
 88                 *pDst++ = (nValue & 0x0000ff00>> 8;
 89                 nDstLen++;
 90                 if (*pSrc != '=')
 91                 {
 92                     nValue += DeBase64Tab[*pSrc++];
 93                     *pDst++ =nValue & 0x000000ff;
 94                     nDstLen++;
 95                 }
 96             }
 97             i += 4;
 98         }
 99         else        // 回車換行,跳過
100         {
101             pSrc++;
102             i++;
103         }
104      }
105     // 輸出加個結束符
106     *pDst = '\0';
107     return nDstLen;
108 }

posted on 2008-04-23 12:06 kenlistian 閱讀(822) 評論(0)  編輯 收藏 引用 所屬分類: cpp
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美—级a级欧美特级ar全黄| 欧美一区二区三区在| 国产精品伦子伦免费视频| 欧美日韩国产色综合一二三四 | 国产欧美一区二区视频| 国产精品香蕉在线观看| 国内精品一区二区三区| 在线观看国产精品网站| 夜夜嗨av色综合久久久综合网| 亚洲午夜女主播在线直播| 久久精品导航| 亚洲国产高清视频| 欧美视频一区二区三区在线观看 | 黑人操亚洲美女惩罚| 一区二区在线观看视频| 91久久精品日日躁夜夜躁欧美| 99精品国产高清一区二区| 亚洲欧美成人一区二区三区| 久久综合色综合88| 夜夜嗨av一区二区三区中文字幕| 欧美一区二区女人| 欧美精品一区二区三区视频 | 老牛影视一区二区三区| 欧美性大战xxxxx久久久| 国外成人在线| 亚洲日韩欧美一区二区在线| 亚洲欧美日韩视频二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲一区久久久| 久久米奇亚洲| 国产精品日韩久久久| 亚洲精品在线二区| 久久精品国产视频| 宅男精品视频| 欧美成人自拍视频| 国内精品国产成人| 午夜精品视频在线| aⅴ色国产欧美| 欧美成在线视频| 亚洲第一偷拍| 鲁大师影院一区二区三区| 小处雏高清一区二区三区| 欧美视频四区| 亚洲视频自拍偷拍| 亚洲精品视频二区| 欧美国产在线电影| 最新国产成人在线观看| 欧美大学生性色视频| 久久久久久国产精品mv| 国产综合自拍| 久久天天躁狠狠躁夜夜av| 亚洲婷婷综合久久一本伊一区| 欧美精品在线一区| av72成人在线| 日韩视频精品| 国产精品爱啪在线线免费观看| 99re在线精品| 亚洲精品人人| 欧美视频在线观看一区二区| 一本久久知道综合久久| 亚洲精品专区| 欧美大尺度在线观看| 99国产精品私拍| 香蕉久久国产| 国产亚洲一本大道中文在线| 欧美在线视频a| 久久国产精品72免费观看| 国产欧美精品日韩精品| 久久久.com| 久久人人爽人人| 亚洲激情一区二区| 亚洲国产精品va在看黑人| 欧美成人一区二区三区在线观看| 亚洲精品国产精品乱码不99 | 性欧美暴力猛交69hd| 国产欧亚日韩视频| 久久嫩草精品久久久久| 免费成人高清视频| 中文日韩欧美| 欧美一级网站| 亚洲乱码国产乱码精品精98午夜 | 精品91久久久久| 亚洲国产99精品国自产| 欧美日韩精品三区| 欧美一区亚洲| 毛片基地黄久久久久久天堂| 夜夜嗨av色综合久久久综合网| 亚洲欧美亚洲| 亚洲精品男同| 欧美一区二区三区免费观看视频| 亚洲第一主播视频| 在线视频亚洲| 91久久精品国产91久久性色| 在线一区观看| 亚洲国产精品第一区二区三区| 99精品热视频只有精品10| 国内精品久久久久久久97牛牛| 91久久久久久久久| 国产一区二区三区在线观看视频| 亚洲国产aⅴ天堂久久| 国产欧美日韩精品一区| 亚洲欧洲日本在线| 在线不卡视频| 亚洲欧美精品在线| 一级日韩一区在线观看| 久久亚洲视频| 久久精品免费播放| 国产精品久久久久免费a∨| 亚洲大胆美女视频| 国产一区二区久久| 亚洲少妇最新在线视频| 日韩视频一区二区三区在线播放免费观看| 亚洲综合第一| 亚洲一区免费在线观看| 欧美二区在线看| 麻豆国产精品777777在线 | 99精品黄色片免费大全| 久久婷婷久久一区二区三区| 亚洲黄色成人| 国产精品婷婷午夜在线观看| 亚洲国产黄色| 亚洲国产成人高清精品| 午夜亚洲视频| 欧美在线亚洲在线| 国产精品久久一卡二卡| 亚洲精品影院| 日韩一级黄色片| 牛牛影视久久网| 嫩草国产精品入口| 原创国产精品91| 久久久福利视频| 麻豆成人小视频| 1024国产精品| 久热精品在线| 欧美国产日产韩国视频| 91久久精品国产91久久性色tv| 久久亚洲精品一区二区| 欧美成人免费播放| 亚洲激情成人在线| 美女视频黄a大片欧美| 欧美电影免费观看大全| 亚洲精品一区二区三区不| 欧美国产日韩一二三区| 亚洲日本激情| 中日韩午夜理伦电影免费| 欧美激情第4页| 一本一本久久| 欧美在线999| 狠狠综合久久| 免费成人av在线| 99精品国产热久久91蜜凸| 亚洲欧美日韩视频一区| 国内精品视频在线播放| 麻豆成人av| a4yy欧美一区二区三区| 欧美自拍偷拍午夜视频| 亚洲第一级黄色片| 欧美日韩视频一区二区三区| 亚洲男人的天堂在线aⅴ视频| 久久躁日日躁aaaaxxxx| 日韩视频在线一区| 国产精品一页| 欧美1级日本1级| 一本色道久久综合亚洲精品小说| 性做久久久久久免费观看欧美| 欧美成人自拍视频| 欧美激情视频网站| 在线亚洲精品| 久久久噜噜噜久久狠狠50岁| 国产亚洲制服色| 欧美mv日韩mv亚洲| 亚洲影院污污.| 米奇777在线欧美播放| 在线亚洲欧美| 激情成人中文字幕| 欧美性事在线| 麻豆成人在线播放| 亚洲欧美日本在线| 亚洲精品你懂的| 性久久久久久久久| 亚洲免费高清| 一区二区三区自拍| 国产精品久久久久久久久久直播| 久久久久久日产精品| 在线亚洲精品| 亚洲久久一区二区| 男人插女人欧美| 亚洲日本在线视频观看| 999在线观看精品免费不卡网站| 玖玖玖免费嫩草在线影院一区| 老牛影视一区二区三区| 亚洲性视频网站| 亚洲国产精品99久久久久久久久| 久久精品国产999大香线蕉| 一本色道久久综合亚洲精品不卡| 韩国成人福利片在线播放| 国产精品你懂的在线欣赏| 欧美日韩中字| 欧美日韩99| 欧美激情一区二区三区不卡|