大疆base64实现有人吗 #大疆笔试#
全部评论
我就不知道3个输入的数字怎么转换成24bit
我是先把16进制的字符串转换成二进制的字符串,然后再六个六个的处理二进制的字符串,有一个要注意的点就是记录一下初始字符串的长度,后面处理时超过这个长度就break出来,后面再补 =
string _hex2bits(char s)
{
int num;
if ('0' <= s && s <= '9'){
num = s - '0';
} else{
num = s - 'A' + 10;
}
string str;
for (int i = 0; i < 8; i++)
{
int mod = num % 2;
str.push_back('0' + mod);
num = num / 2;
}
reverse(str.begin(), str.end());
return str;
}
int _bits2num(string& str)
{
int result = 0;
int base = 1;
for (int i = str.length()-1; i >= 0; i--) {
if (str[i] == '1'){
result += base;
}
base *= 2;
}
return result;
}
char _num2char(int num)
{
assert(num >= 0 && num <= 63);
if (0 <= num && num <= 25)
{
return 'A' + (num - 0);
}
else if (26 <= num && num <= 51)
{
return 'a' + (num - 26);
}
else if (52 <= num && num <= 61)
{
return '0' + (num - 52);
}
else if (num == 62)
{
return '+';
}
else
{
return '//';
}
}
void hex2base64(string& str)
{
transform(str.begin(), str.end(), str.begin(), ::toupper);
int mod = str.length() % 3;
mod = mod == 0 ? -1 : 3 - mod;
string tmp;
for (int i = 0; i < str.length(); i++){
tmp += _hex2bits(str[i]);
}
for (int i = 0; i+6 <= tmp.length(); i = i+6)
{
string base64bits = tmp.substr(i, 6);
int num = _bits2num(base64bits);
cout << _num2char(num);
}
for (int i = 0; i < mod+1; i++)
{
cout << '=';
}
}
int main()
{
string test1 = "1A2";
hex2base64(test1);
return 0;
}
看了半天没看懂,后来理解了没时间了😅
同一个题,没思路T﹏T
有思路 但是没有时间debug🤣
刚刚在csdn看到一个带输入输出的实现 写了一百四十行😤
输入是二进制序列,tmd,我以为是任意字符串序列😂
我理解错了 ,=补的是byte字节 而不是位数
老哥有收到面试通知吗
题目考base64编码什么鬼哦,不带这么玩儿的😂🤣
突然就懵了
差一分钟从本地ide粘贴的时候没提交上,气死人了,这个赛码系统是真难用
57%
笑死,根本读不懂题目
完全没看懂
m
没看懂题,14%
所以多少分过笔试 这道题好像18分😂
相关推荐
点赞 评论 收藏
分享