base64编码

base64编码:
//
// Created by Harold on 2022/8/14/0014.
//
#include <iostream>
#include <string>
#include <vector>
#define MAX_SIZE 1000
using namespace std;
class Solution{
public:
    void getInput(){
        cin>>codeList;
    }
    void getTheAns(){
        int startIndex = 0, endIndex;
        int codeLen = codeList.size();
        if(codeLen <= 0){
            cout<<"";
        }
        while(startIndex < codeLen){
            if(startIndex + 2 < codeLen){
                endIndex = startIndex + 2;
            }
            else{
                endIndex = codeLen - 1;
            }
            decode(codeList.substr(startIndex,endIndex+1));
            startIndex = endIndex + 1;
        }
        cout<<base64StrList;
    }
    void run(){
        getInput();
        getTheAns();
    }
    void decode(string subCode){
        vector<int> base64(4,0);
        int subCodeLen = subCode.size();
        string res(4,'0');
        base64[0] = int(subCode[0]) >> 2; // 取第一个字节前6位(通过右移两位)
        if(subCodeLen == 1){
            base64[1] = ((int(subCode[0]) & 0x03) << 4);
            base64[2] = MAX_SIZE;
            base64[3] = MAX_SIZE;
        }
        else if(subCodeLen == 2){
            base64[1] = ((int(subCode[0]) & 0x03) << 4) + (int(subCode[1]) >> 4);
            base64[2] = ((int(subCode[1]) & 0x0f) << 2);
            base64[3] = MAX_SIZE;
        }
        else if(subCodeLen == 3){
            base64[1] = ((int(subCode[0]) & 0x03) << 4) + (int(subCode[1]) >> 4); // 取第一个字节后2位作为高位,第二个字节前4位作为低位
            base64[2] = ((int(subCode[1]) & 0x0f) << 2) + (int(subCode[2]) >> 6);
            base64[3] = (int(subCode[2]) & 0x3f);
        }
        else{
            cout<<"error !\n";
            return;
        }

        for(int i = 0; i < base64.size(); i++){
            if(0 <= base64[i] && base64[i] <= 25){
                res[i] = char('A' + base64[i]);
            }
            else if(26 <= base64[i] && base64[i] <= 51){
                res[i] = char('a' + base64[i] - 26);
            }
            else if(52 <= base64[i] && base64[i] <=61){
                res[i] = char('0' + base64[i] - 52);
            }
            else if(base64[i] == 62){
                res[i] = '+';
            }
            else if(base64[i] == 63){
                res[i] = '/';
            }
            else if(base64[i] == MAX_SIZE){
                res[i] = '=';
            }
            else{
                cout<<"error !\n";
                return;
            }
        }
        base64StrList += res;
    }

private:
    string codeList;
    string base64StrList;
};
int main(){
    Solution s;
    s.run();
}



#大疆笔试##算法题#
全部评论
事后诸葛亮
1 回复 分享
发布于 2022-08-14 22:13

相关推荐

01-23 19:12
门头沟学院 Java
榨出爱国基因:你还差 0.1% 就拿到校招礼盒,快叫朋友给你砍一刀吧
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14116次浏览 183人参与
# 面试被问“你的缺点是什么?”怎么答 #
6486次浏览 100人参与
# 水滴春招 #
16641次浏览 364人参与
# 入职第四天,心情怎么样 #
11356次浏览 63人参与
# 租房找室友 #
8060次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26200次浏览 356人参与
# 职场新人生存指南 #
199308次浏览 5519人参与
# 参加完秋招的机械人,还参加春招吗? #
27030次浏览 276人参与
# 文科生还参加今年的春招吗 #
4122次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48639次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144724次浏览 829人参与
# 如果重来一次你还会读研吗 #
155733次浏览 1706人参与
# 机械人选offer,最看重什么? #
69078次浏览 449人参与
# 选择和努力,哪个更重要? #
44330次浏览 494人参与
# 如果再来一次,你还会学硬件吗 #
103653次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20529次浏览 414人参与
# 招聘要求与实际实习内容不符怎么办 #
46804次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4654次浏览 27人参与
# 你们的毕业论文什么进度了 #
901356次浏览 8961人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81380次浏览 496人参与
# 国企还是互联网,你怎么选? #
109200次浏览 853人参与
牛客网
牛客企业服务