/************************************************************************/ /* Copyright (C), 2016-2020, [IT], 保留所有权利; /* 模 块 名:; /* 描 述:; /* /* 版 本:[V]; /* 作 者:[IT]; /* 日 期:[5/24/2016]; /* /* /* 注 意:; /* /* 修改记录:[IT]; /* 修改日期:; /* 修改版本:; /* 修改内容:; /************************************************************************/ #ifndef __BASE64_CODE__ #define __BASE64_CODE__ #pragma once class CBase64 { public: CBase64(void); ~CBase64(void); /************************************************************************/ /* 函数:[5/24/2016 IT]; /* 描述:获取指定字符串长度对应的Base64字符长度; /* 参数:; /* [IN] len:要计算的字符长度; /* 返回:返回指定长度len的字符串转换为编码Base64对应的长度,并多加一个'\0'结束符; /* 注意:; /************************************************************************/ static int CalcBase64Len(IN const size_t& len) { return (len / 3 + (len % 3 ? 1 : 0)) * 4 + 1; // one more byte for '\0' } static void binToBase64(IN const unsigned char *pbinary, IN size_t nbinaryLen, OUT char *pOutBase64); /************************************************************************/ /* 函数:[5/24/2016 IT]; /* 描述:获取指定Base64字符串长度对应的字节长度; /* 参数:; /* [IN] len:要计算的Base64字符长度; /* 返回:返回指定长度len的Base64字符串转换为字节对应的长度; /* 注意:; /************************************************************************/ static int CalcBinLen(size_t len) { return len / 4 * 3; } static int base64ToBin(IN const char *pBase64, OUT unsigned char *pbinary, IN size_t maxLen); private: static char decode64(unsigned char ch) { return ch < 128 ? sm_base64val[ch] : BAD; } private: enum {BAD = -1}; // 必须是ASCII字符; static const char sm_base64digits[65]; // 必须是ASCII字符; static const char sm_base64val[128]; }; #endif // __BASE64_CODE__