3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
[C/C++演算法]-Base64演算法 本篇要分享Base64演算法,有興趣的(C/P)同好,歡迎來(C/P)一下哈哈 ^ ^。 程式碼 #include #include staticconst std::string base64_chars =              "ABCDEFGHIJKLMNOPQRSTUVWXYZ"              "abcdefghijklmnopqrstuvwxyz"              "0123456789+/"; std::string base64_encode(unsignedcharconst* , unsignedint len); std::string base64_decode(std::string const& s);   int main() {   const std::string s = "ADP GmbH\nAnalyse Design & Programmierung\nGesellschaft mit beschrankter Haftung" ;     std::string encoded = base64_encode(reinterpret_cast<constunsignedchar*>(s.c_str()), s.length());   std::string decoded = base64_decode(encoded);     std::cout << "encoded: " << encoded << std::endl;   std::cout << "decoded: " << decoded << std::endl;     return 0; }   staticinlinebool is_base64(unsignedchar c) {   return (isalnum(c) || (c == '+') || (c == '/')); }   std::string base64_encode(unsignedcharconst* bytes_to_encode, unsignedint in_len) {   std::string ret;   int i = 0;   int j = 0;   unsignedchar char_array_3[3];   unsignedchar 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_decode(std::string const& encoded_string) {   int in_len = encoded_string.size();   int i = 0;   int j = 0;   int in_ = 0;   unsignedchar 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] = 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] = 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; }    

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦