TA的每日心情 | 开心 2024-3-4 16:42 |
---|
签到天数: 41 天 [LV.5]常住居民I
02:00元婴期
- 积分
- 240
|
- #pragma once
- #include <string>
- class CCBase64
- {
- public:
- CCBase64(void);
- virtual ~CCBase64(void);
- public:
- std::string base64encode(std::string src, int srclen);
- std::string base64decode(std::string inpt, int * len);
- protected:
- unsigned char * base64;
- };
- #include "StdAfx.h"
- #include "CBase64.h"
- CCBase64::CCBase64(void)
- {
- base64 = (unsigned char *)"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- }
- CCBase64::~CCBase64(void)
- {
- }
- std::string CCBase64::base64encode(std::string src, int srclen)
- {
- int n, buflen, i, j;
- static unsigned char *dst;
- std::string buf = src;
- buflen = n = srclen;
- dst = (unsigned char*)malloc(buflen / 3 * 4 + 3);
- memset(dst, 0, buflen / 3 * 4 + 3);
- for (i = 0, j = 0; i <= buflen - 3; i += 3, j += 4) {
- dst[j] = (buf[i] & 0xFC) >> 2;
- dst[j + 1] = ((buf[i] & 0x03) << 4) + ((buf[i + 1] & 0xF0) >> 4);
- dst[j + 2] = ((buf[i + 1] & 0x0F) << 2) + ((buf[i + 2] & 0xC0) >> 6);
- dst[j + 3] = buf[i + 2] & 0x3F;
- }
- if (n % 3 == 1) {
- dst[j] = (buf[i] & 0xFC) >> 2;
- dst[j + 1] = ((buf[i] & 0x03) << 4);
- dst[j + 2] = 64;
- dst[j + 3] = 64;
- j += 4;
- }
- else if (n % 3 == 2) {
- dst[j] = (buf[i] & 0xFC) >> 2;
- dst[j + 1] = ((buf[i] & 0x03) << 4) + ((buf[i + 1] & 0xF0) >> 4);
- dst[j + 2] = ((buf[i + 1] & 0x0F) << 2);
- dst[j + 3] = 64;
- j += 4;
- }
- for (i = 0; i < j; i++) /* map 6 bit value to base64 ASCII character */
- dst[i] = base64[(int)dst[i]];
- dst[j] = 0;
- std::string dststr((char*)dst);
- return dststr;
- }
- std::string CCBase64::base64decode(std::string inpt, int * len)
- {
- int n, i, j, pad;
- unsigned char *p;
- static unsigned char *dst;
- unsigned char * src;
- *len = 0;
- pad = 0;
- n = inpt.length();
- src = new unsigned char[n];
- for (i = 0; i < n; i++)
- src[i] = inpt[i];
- while (n > 0 && src[n - 1] == '=') {
- src[n - 1] = 0;
- pad++;
- n--;
- }
- for (i = 0; i < n; i++) { /* map base64 ASCII character to 6 bit value */
- p = (unsigned char *)strchr((const char *)base64, (int)src[i]);
- if (!p)
- break;
- src[i] = p - (unsigned char *)base64;
- }
- dst = (unsigned char *)malloc(n * 3 / 4 + 1);
- memset(dst, 0, n * 3 / 4 + 1);
- for (i = 0, j = 0; i < n; i += 4, j += 3) {
- dst[j] = (src[i] << 2) + ((src[i + 1] & 0x30) >> 4);
- dst[j + 1] = ((src[i + 1] & 0x0F) << 4) + ((src[i + 2] & 0x3C) >> 2);
- dst[j + 2] = ((src[i + 2] & 0x03) << 6) + src[i + 3];
- *len += 3;
- }
- *len -= pad;
- std::string destr((char*)dst);
- return destr;
- }
复制代码 如果有不对的请帮改正哈
|
|