C++分割文件并進行BASE64編碼
#include <string>
using namespace std;
string Encode(char* Data,long DataByte)
{
//編碼表
const char EncodeTable[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
//返回值
string strEncode;
unsigned char Tmp[4]={0};
for(long i=0;i<DataByte / 3;i++)
{
Tmp[1] = *Data++;
Tmp[2] = *Data++;
Tmp[3] = *Data++;
strEncode+= EncodeTable[Tmp[1] >> 2];
strEncode+= EncodeTable[((Tmp[1] << 4) | (Tmp[2] >> 4)) & 0x3F];
strEncode+= EncodeTable[((Tmp[2] << 2) | (Tmp[3] >> 6)) & 0x3F];
strEncode+= EncodeTable[Tmp[3] & 0x3F];
}
//對剩余數據進行編碼
int Mod=DataByte % 3;
if(Mod==1)
{
Tmp[1] = *Data++;
strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];
strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4)];
strEncode+= "==";
}
else if(Mod==2)
{
Tmp[1] = *Data++;
Tmp[2] = *Data++;
strEncode+= EncodeTable[(Tmp[1] & 0xFC) >> 2];
strEncode+= EncodeTable[((Tmp[1] & 0x03) << 4) | ((Tmp[2] & 0xF0) >> 4)];
strEncode+= EncodeTable[((Tmp[2] & 0x0F) << 2)];
strEncode+= "=";
}
return strEncode;
}
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,_T("All Files(*.*)|*.*|"));
if(dlg.DoModal()==IDOK)
{
CFile m_splitFile;
if(m_splitFile.Open(dlg.GetPathName(),CFile::modeRead | CFile::shareDenyWrite))
{
CString targetPath="D:";
CString m_fileTitle=m_splitFile.GetFileName();
DWORD FileLength=m_splitFile.GetLength();
DWORD PartLength=1024*512;
int nCount=1;
CString strName;
CFile wrFile;
DWORD ReadBytes;
char* pBuf=new char[PartLength];
while((ReadBytes=m_splitFile.Read(pBuf,PartLength))>=PartLength)
{
strName.Format("%s\\%s%d.enc",targetPath,m_fileTitle,nCount++);
wrFile.Open(strName,CFile::modeWrite | CFile::modeCreate);
string encStr=Encode(pBuf,ReadBytes);
wrFile.Write(encStr.c_str(),encStr.size());
wrFile.Flush();
wrFile.Close();
}
if(nCount==1 && ReadBytes<PartLength)
{
strName.Format("%s\\%s.enc",targetPath,m_fileTitle,nCount++);
wrFile.Open(strName,CFile::modeWrite | CFile::modeCreate);
string encStr=Encode(pBuf,ReadBytes);
wrFile.Write(encStr.c_str(),encStr.size());
wrFile.Flush();
wrFile.Close();
}
m_splitFile.Close();
delete pBuf;
}
}
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!