VC中BASE64编码和解码使用详解

2020-01-06 13:59:03丽君
  • {  // should pad one equal sign 
  • i = iSrcLen-2;  BYTE a1 = (pInput[i] >> 2); 
  • BYTE a2 = ( ((pInput[i] & 0x03) << 4) | (pInput[i+1] >> 4));  BYTE a3 = ( (pInput[i+1] & 0x0F) << 2); 
  •   pOutput[iDstLen++] = AVal(a1); 
  • pOutput[iDstLen++] = AVal(a2);  pOutput[iDstLen++] = AVal(a3); 
  • pOutput[iDstLen++] = '=';  pOutput[iDstLen] = 0x00; 
  • }  else 
  • {  // just division by 3 
  • pOutput[iDstLen] = 0x00;  } 
  •   return iDstLen; 
  • 下面是解码

     

     
    1. const BYTE Base64IdxTab[128] =  { 
    2. 255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255,  255,255,255,255, 255,255,255,255, 255,255,255,255, 255,255,255,255, 
    3. 255,255,255,255, 255,255,255,255, 255,255,255,62, 255,255,255,63,  52,53,54,55, 56,57,58,59, 60,61,255,255, 255,255,255,255, 
    4. 255,0,1,2, 3,4,5,6, 7,8,9,10, 11,12,13,14,  15,16,17,18, 19,20,21,22, 23,24,25,255, 255,255,255,255, 
    5. 255,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,  41,42,43,44, 45,46,47,48, 49,50,51,255, 255,255,255,255 
    6. };   
    7. #define BVal(x) Base64IdxTab[x]