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

2020-01-06 13:59:03丽君
  • TCHAR *dv;  dv = (TCHAR *)malloc(len*sizeof(TCHAR)); 
  • data.Read(dv, len);  data.Close(); 
  • int slen = (len / 4) * 3;  slen += 10; 
  • BYTE * tc;  tc = (BYTE *)malloc(slen); 
  • BASE64_Decode(dv, len, tc);  //直接在内存里面构建CIMAGE,需要使用IStream接口,如何使用 
  • //构建内存环境   HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, slen); 
  • void * pData = GlobalLock(hGlobal);  memcpy(pData, tc, slen); // 拷贝位图数据进去 
  • GlobalUnlock(hGlobal);  // 创建IStream 
  • IStream * pStream = NULL;  if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK) 
  • return ;  // 使用CImage加载位图内存 
  • CImage img;  if (SUCCEEDED(img.Load(pStream)) ) 
  • {  CClientDC dc(this); 
  • //使用内在中构造的图像 直接在对话框上绘图  img.Draw(dc.m_hDC, 0, 0, 500, 300); 
  • }  //释放内存 
  • pStream->Release();  GlobalFree(hGlobal); 
  • //如果要保存图像文件的话,那就使用下面的代码  //CFileDialog savefile(FALSE, ".jpg", ""); 
  • //if (savefile.DoModal()==IDOK)  //{ 
  • // CFile save(savefile.GetPathName(), CFile::modeCreate | CFile::modeWrite);  // save.Write(tc, slen); 
  • // save.Close();  //} 
  • free(tc);  free(dv); 
  • }  }