zoukankan      html  css  js  c++  java
  • base64 encoding

    //https://en.wikipedia.org/wiki/Base64

       std::string base64Encode(const std::vector<char>& byteData);

       std::vector<char> base64Decode(std::string & const inputString);


    std::string Cbase64Dlg::base64Encode(const std::vector<char>& byteData)
    {
       const std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
       std::string base64String;
       int b;
       for (size_t i = 0; i < byteData.size(); i = i+3)
       {
          b = (byteData[i] & 0xFC) >> 2;
          base64String.push_back(codes[b]);
          b = (byteData[i] & 0x03) << 4;
          if (i + 1 < byteData.size())
          {
             b |= (byteData[i + 1] & 0xF0) >> 4;
             base64String.push_back(codes[b]);
             b = (byteData[i + 1] & 0x0F) << 2;
             if (i+2 < byteData.size())
             {
                b |= (byteData[i + 2] & 0xC0) >> 6;
                base64String.push_back(codes[b]);
                b = byteData[i + 2] & 0x3F;
                base64String.push_back(codes[b]);
             }
             else
             {
                base64String.push_back(codes[b]);
                base64String.append("=");
             }
          }
          else
          {
             base64String.push_back(codes[b]);
             base64String.append("==");
          }
       }
       
       return base64String;
    }

    std::vector<char> Cbase64Dlg::base64Decode(std::string & const inputString)
    {   
       static std::string codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
       std::vector<char> decoded;

       if (inputString.length() % 4 != 0)    
       {
          return std::vector<char>();
       }

       //The ratio of output bytes to input bytes is 4:3
       int outLen = (inputString.length() * 3 / 4);

       size_t pos = inputString.find_first_of('=');
       if (pos != std::string::npos)
       {
          decoded.resize(outLen - (inputString.length() - pos));
       }
       else
       {
          decoded.resize(outLen);
       }

       int j = 0;
       int b[4] = {};

       const char* p = inputString.c_str();

       while(p && *p && j < outLen)
       {
          bool valid = false;
          for (int i=0; p && i < 4; ++i)
          {
             size_t pos = codes.find_first_of(*p++);
             if ( pos != std::string::npos)
             {
                b[i] = pos;
             }
          }

          if (j < outLen)
          {
             decoded[j++] = (byte) ((b[0] << 2) | (b[1] >> 4));;
             if (j < outLen && b[2] < 64)      
             {
                decoded[j++] = (byte) ((b[1] << 4) | (b[2] >> 2));

                if (j < outLen && b[3] < 64)  
                {
                   decoded[j++] = (byte) ((b[2] << 6) | b[3]);
                }
             }
          }
       }

       return decoded;
    }
    void Cbase64Dlg::OnBnClickedButton1()
    {
       char myints[] = "ABC&&&&&&&&&&";
       std::vector<char> byte (myints, myints + sizeof(myints) / sizeof(char) );
       std::string value = base64Encode(byte);
       std::cout << value << std::endl;
       std::vector<char>decode = base64Decode(value);
    }

  • 相关阅读:
    分布式协调服务 ( 服务治理 ).
    【Java常用类之enumm枚举类 20】
    【Java常用类之date类 19】
    【Java常用类之String类18】
    【Java数组算法17】
    【Java数组-二维数组16】
    【Java数组-一维数组15】
    【Java异常 14】
    【Java的package/import&访问权限&修饰符&Object常用方法 13】
    《Rubu基础教程第五版》第十七章笔记 IO类
  • 原文地址:https://www.cnblogs.com/zhoug2020/p/4668800.html
Copyright © 2011-2022 走看看