Base64.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /************************************************************************/
  2. /* Copyright (C), 2016-2020, [IT], 保留所有权利;
  3. /* 模 块 名:;
  4. /* 描 述:;
  5. /*
  6. /* 版 本:[V];
  7. /* 作 者:[IT];
  8. /* 日 期:[5/24/2016];
  9. /*
  10. /*
  11. /* 注 意:;
  12. /*
  13. /* 修改记录:[IT];
  14. /* 修改日期:;
  15. /* 修改版本:;
  16. /* 修改内容:;
  17. /************************************************************************/
  18. #ifndef __BASE64_CODE__
  19. #define __BASE64_CODE__
  20. #pragma once
  21. class CBase64
  22. {
  23. public:
  24. CBase64(void);
  25. ~CBase64(void);
  26. /************************************************************************/
  27. /* 函数:[5/24/2016 IT];
  28. /* 描述:获取指定字符串长度对应的Base64字符长度;
  29. /* 参数:;
  30. /* [IN] len:要计算的字符长度;
  31. /* 返回:返回指定长度len的字符串转换为编码Base64对应的长度,并多加一个'\0'结束符;
  32. /* 注意:;
  33. /************************************************************************/
  34. static int CalcBase64Len(IN const size_t& len) {
  35. return (len / 3 + (len % 3 ? 1 : 0)) * 4 + 1; // one more byte for '\0'
  36. }
  37. static void binToBase64(IN const unsigned char *pbinary, IN size_t nbinaryLen, OUT char *pOutBase64);
  38. /************************************************************************/
  39. /* 函数:[5/24/2016 IT];
  40. /* 描述:获取指定Base64字符串长度对应的字节长度;
  41. /* 参数:;
  42. /* [IN] len:要计算的Base64字符长度;
  43. /* 返回:返回指定长度len的Base64字符串转换为字节对应的长度;
  44. /* 注意:;
  45. /************************************************************************/
  46. static int CalcBinLen(size_t len) {
  47. return len / 4 * 3;
  48. }
  49. static int base64ToBin(IN const char *pBase64, OUT unsigned char *pbinary, IN size_t maxLen);
  50. private:
  51. static char decode64(unsigned char ch) {
  52. return ch < 128 ? sm_base64val[ch] : BAD;
  53. }
  54. private:
  55. enum {BAD = -1};
  56. // 必须是ASCII字符;
  57. static const char sm_base64digits[65];
  58. // 必须是ASCII字符;
  59. static const char sm_base64val[128];
  60. // mfc版本;
  61. public:
  62. #ifndef VC60
  63. static CStringA StringToBase64A(IN CStringA strSource);
  64. static CStringW StringToBase64W(IN CStringW strSource);
  65. static CStringA Base64ToStringA(IN CStringA strBase64);
  66. static CStringW Base64ToStringW(IN CStringW strBase64);
  67. #endif
  68. };
  69. #endif // __BASE64_CODE__