當前位置:編程學習大全網 - 網站源碼 - C語言的Base64解碼

C語言的Base64解碼

加壹個break跳出循環即可。

#include?<stdio.h>

#include?<string.h>

int?main(void)

{

char?y[4000]/*原文本*/,b[3999*4/3]/*待解的Base64碼*/,mb[64]/*Base64碼表*/;

int?i,j/*i,j為兩個計數用的變量*/,zu/*將待解的Base64碼分成4個字符壹組,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);/*輸入Base64碼*/

for?(i=0;i<strlen(b)-1;++i)/*處理b中的每個字符*/

for?(j=0;j<64;++j)?

if?(mb[j]==b[i])?

{

b[i]=j; /*尋找各字符對應的碼表序號,貌似就是這裏出的問題*/

break;?/*壹找到就跳出,可避免重復比較。沒有這句會重復比較到最後,如果j的值剛好落在字符數字的ASCII碼中,會引起的重復的給b[i]賦值*/

}

for?(zu=0;zu<(strlen(b)-1)/4;++zu)/*Base64解碼*/

{

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;

}

  • 上一篇:下載的ASP源代碼怎麽建網站?有ISS,已經配置好
  • 下一篇:溯源屬於哪壹個省
  • copyright 2024編程學習大全網