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

2020-01-06 13:59:03丽君
  • 0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0xFF,0xFF,0xFF,0x00,0xFF,0xFF,  0xFF,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E, 
  • 0x0F,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0xFF,0xFF,0xFF,0xFF,0xFF,  0xFF,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28, 
  • 0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0xFF,0xFF,0xFF,0xFF,0xFF  }; 
  •   INT BASE64_Decode( const TCHAR* inputBuffer, INT inputCount, BYTE* outputBuffer ) 
  • {  INT i, j; 
  • BYTE b[4];  TCHAR ch; 
  •   if( (inputBuffer == NULL) || (inputCount < 0) ) 
  • {  return -1; // 参数错误 
  • }   
  • // 去除头部空白字符  while( inputCount > 0 ) 
  • {  ch = *inputBuffer; 
  • if( (ch < 0) || (ch >= 0x80) )  { 
  • return -2; // 数据错误,不在ASCII字符编码范围内  } 
  • else  { 
  • if( DATA_ASCII2BIN[ch] == B64_WS )  { 
  • inputBuffer++;  inputCount--; 
  • }  else 
  • {  break; 
  • }  } 
  • }   
  • // 去除尾部的空白字符、回车换行字符、连字符  while( inputCount >= 4 ) 
  • {  ch = inputBuffer[inputCount - 1]; 
  • if( (ch < 0) || (ch >= 0x80) )  { 
  • return -2; // 数据错误,不在ASCII字符编码范围内  } 
  • else  { 
  • if( B64_NOT_BASE64(DATA_ASCII2BIN[ch]) )  { 
  • inputCount--;  } 
  • else  { 
  • break;  } 
  • }  } 
  •   // 字符串长度必须为4的倍数 
  • if( (inputCount % 4) != 0 )  { 
  • return -2; // 数据错误  } 
  •   if( outputBuffer != NULL )