#include <cpps/cpps.h>#include <iostream>#include <string>#include <fstream>using namespace cpps;using namespace std;static const std::string base64_chars ="ABCDEFGHIJKLMNOPQRSTUVWXYZ""abcdefghijklmnopqrstuvwxyz""0123456789+/";static inline bool is_base64(unsigned char c){return (isalnum(c) || (c == '+') || (c == '/'));}#if defined(__APPLE__) && defined(__MACH__)#pragma clang diagnostic push#pragma clang diagnostic ignored "-Wimplicit-int-conversion"#endifstd::string base64_encode_cuc(unsigned char const* bytes_to_encode, size_t in_len){std::string ret;int i = 0, j = 0;unsigned char char_array_3[3], char_array_4[4];while (in_len--){char_array_3[i++] = *(bytes_to_encode++);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 += base64_chars[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 += base64_chars[char_array_4[j]];while ((i++ < 3))ret += '=';}return ret;}std::string base64_encode(cpps_value v){cpps_cppsclassvar* cppsclassvar = (cpps_cppsclassvar*)v.value.domain;std::string* tmpStr = (std::string*)cppsclassvar->getclsptr();return base64_encode_cuc((unsigned char const*)tmpStr->c_str(), tmpStr->size());}std::string base64_decode(cpps_value v){cpps_cppsclassvar* cppsclassvar = (cpps_cppsclassvar*)v.value.domain;std::string* tmpStr = (std::string*)cppsclassvar->getclsptr();std::string& encoded_string = *tmpStr;size_t in_len = encoded_string.size();size_t i = 0, j = 0, in_ = 0;unsigned char char_array_4[4], char_array_3[3];std::string ret;while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])){char_array_4[i++] = encoded_string[in_]; in_++;if (i == 4) {for (i = 0; i < 4; i++)char_array_4[i] = (unsigned char)base64_chars.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] = (unsigned char)base64_chars.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;}#if defined(__APPLE__) && defined(__MACH__)#pragma clang diagnostic pop#endifcpps_export_void cpps_attach(cpps::C* c){cpps::cpps_init_cpps_class(c);cpps::_module(c, "base64")[def("encode",base64_encode),def("decode",base64_decode)];}cpps_export_void cpps_detach(cpps::C * c){cpps::_unmodule(c, "base64");}cpps_export_finish
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型