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

2020-01-06 13:59:03丽君

至此,利用Base64转码的方式,来显示保存显示图片的方法,就算是成功了!

我们再来看一个base64编码解码的例子

首先是编码

 

 
  1. const BYTE Base64ValTab[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";   
  2. #define AVal(x) Base64ValTab[x]  int CSeeBase64Dlg::EncodeBase64(char * pInput, char * pOutput) 
  3. {  int i = 0; 
  4. int loop = 0;  int remain = 0; 
  5. int iDstLen = 0;  int iSrcLen = (int)strlen(pInput); 
  6.   loop = iSrcLen/3; 
  7. remain = iSrcLen%3;   
  8. // also can encode native char one by one as decode method  // but because all of char in native string is to be encoded so encode 3-chars one time is easier. 
  9.   for (i=0; i < loop; i++) 
  10. {  BYTE a1 = (pInput[i*3] >> 2); 
  11. BYTE a2 = ( ((pInput[i*3] & 0x03) << 4) | (pInput[i*3+1] >> 4) );  BYTE a3 = ( ((pInput[i*3+1] & 0x0F) << 2) | ((pInput[i*3+2] & 0xC0) >> 6) ); 
  12. BYTE a4 = (pInput[i*3+2] & 0x3F);   
  13. pOutput[i*4] = AVal(a1);  pOutput[i*4+1] = AVal(a2); 
  14. pOutput[i*4+2] = AVal(a3);  pOutput[i*4+3] = AVal(a4); 
  15. }   
  16. iDstLen = i*4;   
  17. if (remain == 1)  { 
  18. // should pad two equal sign  i = iSrcLen-1; 
  19. BYTE a1 = (pInput[i] >> 2);  BYTE a2 = ((pInput[i] & 0x03) << 4); 
  20.   pOutput[iDstLen++] = AVal(a1); 
  21. pOutput[iDstLen++] = AVal(a2);  pOutput[iDstLen++] = '='; 
  22. pOutput[iDstLen++] = '=';  pOutput[iDstLen] = 0x00; 
  23. }  else if (remain == 2)