資源簡(jiǎn)介
base64編碼與解碼源程序 C語(yǔ)言實(shí)現(xiàn)
代碼片段和文件信息
#include????
#include????
??
typedef?unsigned?char?BYTE;???
??
/*====================================================================??
?base64編碼函數(shù)??
?btSrc指向被編碼的數(shù)據(jù)緩沖區(qū)??
?iSrcLen被編碼的數(shù)據(jù)的大?。ㄗ止?jié))??
?btRet指向存放base64編碼的數(shù)據(jù)緩沖區(qū)??
?piRetLen指向存放base64編碼的數(shù)據(jù)緩沖區(qū)的長(zhǎng)度??
?若btRet為NULL函數(shù)返回0,piRetLen傳回btSrc的base64編碼所需緩沖區(qū)的大小??
?若btRet指向的緩沖區(qū)太小,函數(shù)返回-1??
?否則函數(shù)返回實(shí)際btSrc的base64編碼所需緩沖區(qū)的大小??
=====================================================================*/??
int?Encodebase64(BYTE?*btSrc?int?iSrcLen?BYTE?*btRet?int?*piRetLen)?//base64編碼???
{???
????int?i?=?0?j?=?0?k?=?0?;???
????BYTE?Encodebase64Map[]?=?“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/“;???
???????
????i?=?(iSrcLen+2)?/?3?*?4?;?//獲取btSrc的base64編碼所需緩沖區(qū)的大小???
????if(btRet?!=?NULL)???
????{???
????????if(*piRetLen?se64編碼所需緩沖區(qū)偏小???
????????????return?-1?;???
????????*piRetLen?=?i?;?//*piRetLen返回btSrc的base64編碼的緩沖區(qū)大小???
????}???
????else??
????{???
????????*piRetLen?=?i?;???
????????return?0?;???
????}???
??
????k?=?iSrcLen?-?iSrcLen?%?3?;???
????for(i=j=0;?i ????{???
????????btRet[j++]?=?Encodebase64Map[(btSrc[i]>>2)&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[((btSrc[i]<<4)?+?(btSrc[i+1]>>4))&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[((btSrc[i+1]<<2)?+?(btSrc[i+2]>>6))&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[btSrc[i+2]&0x3F]?;???
????}???
????k?=?iSrcLen?-?k?;???
????if(1?==?k)???
????{???
????????btRet[j++]?=?Encodebase64Map[(btSrc[i]>>2)&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[(btSrc[i]<<4)&0x3F]?;???
????????btRet[j++]?=?btRet[j]?=?‘=‘?;???
????}???
????else?if(2?==?k)???
????{???
????????btRet[j++]?=?Encodebase64Map[(btSrc[i]>>2)&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[((btSrc[i]<<4)?+?(btSrc[i+1]>>4))&0x3F]?;???
????????btRet[j++]?=?Encodebase64Map[(btSrc[i+1]<<2)&0x3F]?;???
????????btRet[j]?=?‘=‘?;???
????}???
??
????return?++j?;???
}???
??
/*====================================================================???
?base64解碼函數(shù)???
?btSrc指向被解碼的數(shù)據(jù)緩沖區(qū)???
?iSrc
評(píng)論
共有 條評(píng)論