用下面的代码解Base64加密字符老会出错,后来发现处理一个字符时15、16行有时会对b[i]多次赋值,这是怎么回事?(暂时不考虑加密字符中出现等于号的情况)
#include <stdio.h>
#include <string.h>
int main(void)
{
char y[4000],b[3999*4/3],mb[64];
int i,j,zu;
for (i=0;i<26;++i) mb[i]=i+65;
for (i=0;i<26;++i) mb[i+26]=i+97;
for (i=0;i<10;++i) mb[i+52]=i+48;
mb[62]='+';
mb[63]='/';
for(i=0;i<4000;++i) y[i]=0;
for (i=0;i<3999*4/3;b[i++]=0);
fgets(b,3999*4/3-1,stdin);
for (i=0;i<strlen(b)-1;++i)
for (j=0;j<64;++j) if (mb[j]==b[i]) b[i]=j;
for (zu=0;zu<(strlen(b)-1)/4;++zu)
{
y[zu*3+0]=((b[zu*4+0]<<2))|(b[zu*4+1]>>4);
y[zu*3+1]=((b[zu*4+1]<<4))|(b[zu*4+2]>>2);
y[zu*3+2]=((b[zu*4+2]<<6))|b[zu*4+3];
}
printf("%s\n",y);
return 0;
}
C语言的Base64解码
答案:1 悬赏:10 手机版
解决时间 2021-02-05 09:16
- 提问者网友:送舟行
- 2021-02-05 01:53
最佳答案
- 五星知识达人网友:我住北渡口
- 2021-02-05 02:48
加一个break跳出循环即可。
#include <stdio.h>
#include <string.h>
int main(void)
{
char y[4000],b[3999*4/3],mb[64];
int i,j,zu;
for (i=0;i<26;++i) mb[i]=i+65;
for (i=0;i<26;++i) mb[i+26]=i+97;
for (i=0;i<10;++i) mb[i+52]=i+48;
mb[62]='+';
mb[63]='/';
for(i=0;i<4000;++i) y[i]=0;
for (i=0;i<3999*4/3;b[i++]=0);
fgets(b,3999*4/3-1,stdin);
for (i=0;i<strlen(b)-1;++i)
for (j=0;j<64;++j)
if (mb[j]==b[i])
{
b[i]=j;
break;
}
for (zu=0;zu<(strlen(b)-1)/4;++zu)
{
y[zu*3+0]=((b[zu*4+0]<<2))|(b[zu*4+1]>>4);
y[zu*3+1]=((b[zu*4+1]<<4))|(b[zu*4+2]>>2);
y[zu*3+2]=((b[zu*4+2]<<6))|b[zu*4+3];
}
printf("%s\n",y);
return 0;
}
#include <stdio.h>
#include <string.h>
int main(void)
{
char y[4000],b[3999*4/3],mb[64];
int i,j,zu;
for (i=0;i<26;++i) mb[i]=i+65;
for (i=0;i<26;++i) mb[i+26]=i+97;
for (i=0;i<10;++i) mb[i+52]=i+48;
mb[62]='+';
mb[63]='/';
for(i=0;i<4000;++i) y[i]=0;
for (i=0;i<3999*4/3;b[i++]=0);
fgets(b,3999*4/3-1,stdin);
for (i=0;i<strlen(b)-1;++i)
for (j=0;j<64;++j)
if (mb[j]==b[i])
{
b[i]=j;
break;
}
for (zu=0;zu<(strlen(b)-1)/4;++zu)
{
y[zu*3+0]=((b[zu*4+0]<<2))|(b[zu*4+1]>>4);
y[zu*3+1]=((b[zu*4+1]<<4))|(b[zu*4+2]>>2);
y[zu*3+2]=((b[zu*4+2]<<6))|b[zu*4+3];
}
printf("%s\n",y);
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯