更正!
是对邮件的附件进行base64解码!先谢谢了

解决方案 »

  1.   

    我有base64编解码的程序,你试试看。/*  base64 en/decoder  - Ver 1.01 -  Programmed by hsj  : 99.07.29                     : 99.07.30 debug :) */ #include <stdio.h> #include <stdlib.h>   int base64enc(char *,char *); int base64dec(char *,char *); void usage(char *);   void main(int argc,char *argv[]) {     int ret;       if(argc<4)         usage(argv[0]);     if((strcmp(argv[1],"-e")!=0)&&(strcmp(argv[1],"-d")!=0))         usage(argv[0]);     switch(argv[1][1])     {         case 'e':             ret = base64enc(argv[2],argv[3]);             break;         case 'd':             ret = base64dec(argv[2],argv[3]);             break;     }     if(ret==0)         printf("Done...");     else         printf("Error. code[%d]\n",ret); }   int base64enc(char *infile,char *outfile) {     int i,len,llen = 0,pad = 0;     unsigned char buf[4],buf2[4],lf = '\n';     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         if((len=fread((char *)buf,1,3,fpi))==0)             break;         if(len<3)         {             pad = 3 - len;             for(i=len;i<3;i++)                 buf[i] = 0;         }         buf2[0] = buf[0] >> 2;         buf2[1] = (buf[0] & 0x03) << 4 | buf[1] >> 4;         buf2[2] = (buf[1] & 0x0f) << 2 | buf[2] >> 6;         buf2[3] = buf[2] & 0x3f;         for(i=0;i<4;i++)         {             if(buf2[i]>=0 && buf2[i]<=25)                 buf2[i] = buf2[i] + 'A';             else if(buf2[i]>=26 && buf2[i]<=51)                 buf2[i] = buf2[i] - 26 + 'a';             else if(buf2[i]>=52 && buf2[i]<=61)                 buf2[i] = buf2[i] - 52 + '0';             else if(buf2[i]==62)                 buf2[i] = '+';             else if(buf2[i]==63)                 buf2[i] = '/';         }         if(pad)         {             fwrite(buf2,4-pad,1,fpo);             for(i=0;i<pad;i++)                 buf2[i] = '=';             fwrite(buf2,pad,1,fpo);         }         else             fwrite(buf2,4,1,fpo);         llen += 4;         if(llen==76)         {             fwrite(&lf,1,1,fpo);             llen = 0;         }     }     fwrite(&lf,1,1,fpo);     fclose(fpi);     fclose(fpo);     return(0); }   int base64dec(char *infile,char *outfile) {     int i,pad = 0;     unsigned char buf[4],buf2[4];     FILE *fpi,*fpo;       if((fpi=fopen(infile,"rb"))==0)         return(-1);     if((fpo=fopen(outfile,"wb"))==0)     {         fclose(fpi);         return(-2);     }     for(;;)     {         i = 0;         while(i<4)         {             if(fread(&buf[i],1,1,fpi)==0)                 break;             if((buf[i]!='\r')&&(buf[i]!='\n'))                 i++;         }         if(i==0)             break;         if(i!=4)         {             fclose(fpi);             fclose(fpo);             remove(outfile);             return(-3);         }         for(i=0;i<4;i++)         {             if(buf[i]>='A' && buf[i]<='Z')                 buf[i] = buf[i] - 'A';             else if(buf[i]>='a' && buf[i]<='z')                 buf[i] = buf[i] - 'a' + 26;             else if(buf[i]>='0' && buf[i]<='9')                 buf[i] = buf[i] - '0' + 52;             else if(buf[i]=='+')                 buf[i] = 62;             else if(buf[i]=='/')                 buf[i] = 63;             else if(buf[i]=='=')             {                 pad = 4 - i;                 for(;i<4;i++)                     buf[i] = 0;                 break;             }             else             {                 fclose(fpi);                 fclose(fpo);                 remove(outfile);                 return(-4);             }         }         buf2[0] = buf[0] << 2 | buf[1] >> 4;         buf2[1] = buf[1] << 4 | buf[2] >> 2;         buf2[2] = buf[2] << 6 | buf[3];         fwrite(buf2,3-pad,1,fpo);     }     fclose(fpi);     fclose(fpo);     return(0); }   void usage(char *name) {     printf("usage : $ %s [-e:d] target-file out-file\n",name);     printf("   -e : execute base64 encode.\n");     printf("   -d : execute base64 decode.\n");     exit(0); }