Base64 编码解码C++实现
来源:互联网 发布:dreamweaver破解版mac 编辑:程序博客网 时间:2024/06/05 07:07
#ifndef __BASE64_H__#define __BASE64_H__#include <string>using namespace std;/* The character array*/const string kBase64Array = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";/* Is the character in base64?*/bool __IsBase64( BYTE b ){ return ( (b >= '0' && b <= '9') || (b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '+' || b == '/' );}/* Encode*/string Base64Encode( LPCVOID vpData, SIZE_T Size ){ string ret; const BYTE* pData = (const BYTE *) vpData; int i = 0; int j = 0; BYTE char_array_3[3]; BYTE char_array_4[4]; while (Size--) { char_array_3[i++] = *(pData++); if (i == 3) { char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); char_array_4[3] = char_array_3[2] & 0x3f; for(i = 0; i < 4; i++) ret += kBase64Array[char_array_4[i]]; i = 0; } } if (i) { for(j = i; j < 3; j++) char_array_3[j] = '\0'; char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); char_array_4[3] = char_array_3[2] & 0x3f; for (j = 0; j < i + 1; j++) ret += kBase64Array[char_array_4[j]]; while(i++ < 3) ret += '='; } return ret;}/* Decode*/string Base64Decode( LPCVOID pData, SIZE_T Size ){ string ret; string encoded_string( (const char *)pData ); int in_len = (int)encoded_string.size(); int i = 0; int j = 0; int in_ = 0; BYTE char_array_4[4], char_array_3[3]; while (in_len-- && ( encoded_string[in_] != '=') && __IsBase64(encoded_string[in_])) { char_array_4[i++] = encoded_string[in_]; in_++; if (i ==4) { for (i = 0; i <4; i++) char_array_4[i] = (BYTE)kBase64Array.find(char_array_4[i]); char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; for (i = 0; (i < 3); i++) ret += char_array_3[i]; i = 0; } } if (i) { for (j = i; j <4; j++) char_array_4[j] = 0; for (j = 0; j <4; j++) char_array_4[j] = (BYTE)kBase64Array.find(char_array_4[j]); char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; for (j = 0; (j < i - 1); j++) ret += char_array_3[j]; } return ret;}#endif
0 0
- Base64编码解码和URLEnocde编码解码的C实现
- base64编码解码的实现(C语言)
- base64编码解码的实现(C语言)
- Base64编码解码的实现(C语言)
- .net C#实现Base64编码与解码
- C#实现Base64编码与解码
- Base64编码解码c语言实现
- Base64编码解码C语言实现
- Base64编码解码的实现(C语言)
- base64 编码解码 c语言实现
- C#实现Base64编码与解码
- C#实现Base64编码与解码
- C#实现Base64编码与解码
- base64编码、解码的C语言实现
- C#实现Base64编码与解码
- C#实现Base64编码与解码
- C#实现Base64编码与解码
- Base64编码解码C语言实现
- 多ip出口vpn
- Consul入门07 - Consul Web界面
- Ajax本地跨域问题
- -我的技术之路
- Android中生成XML总结
- Base64 编码解码C++实现
- textview实现界面跳转
- Android网易评论盖楼效果实现
- 【leetcode】26. Remove Duplicates from Sorted Array
- 《Thinkinginjava》第8章-多态
- 欢迎使用CSDN-markdown编辑器
- Spark Streaming使用Kafka保证数据零丢失
- Hibernate Tools-代码生成
- 华为机试---矩阵元素相乘