#include <string.h>
#include <stdlib.h>//Base64Encod
//Encode string
//Param: buftoenc,input string to encode
// bufsize,input string length
// encbug, output string encoded
//Return value:Encoded string length??? if fail return -1???
int Base64Encod(char *buftoenc,int bufsize,char *encbuf)
{
int i=0;
int b64byte[5];
unsigned char *buftemp; //Allocate space for the temporary string
buftemp=(unsigned char *)malloc(bufsize+2);
strcpy(buftemp,buftoenc);
if (bufsize%3==1)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
}
if (bufsize%3==2)buftemp[bufsize]='\0';
while (i<bufsize)
{
b64byte[0]=buftemp[i]>>2;
b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
b64byte[3]=buftemp[i+2]&0x3F;
encbuf[i+(i/3)]=Base64Table[b64byte[0]];
encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
i+=3;
}
free(buftemp);
if (bufsize%3==0)return bufsize*8/6;
if (bufsize%3==1)return((bufsize+2)*8/6)-2;
if (bufsize%3==2)return((bufsize+1)*8/6)-1;
return -1;
} //Base64Decod
//Encode string
//Param: buftodec,input string to decode
// bufsize,input string length
// decbug, output string decoded
//Return value:Decoded string length??? if fail return -1???
int Base64Decod(char *buftodec, int bufsize, char *decbuf)
{
int i=0;
unsigned char binbyte[4];
int cpos[5];
unsigned char *buftemp; //Allocate space for the temporary string
buftemp=(unsigned char *)malloc(bufsize + 4);
strcpy((char*)buftemp,buftodec);
if (bufsize%4==1)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
buftemp[bufsize+2]='\0';
}
if (bufsize%4==2)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
}
if (bufsize%4==3)buftemp[bufsize]='\0';
while (i<bufsize)
{
cpos[0]=strchr(Base64Table,buftemp[i])-Base64Table;
cpos[1]=strchr(Base64Table,buftemp[i+1])-Base64Table;
cpos[2]=strchr(Base64Table,buftemp[i+2])-Base64Table;
cpos[3]=strchr(Base64Table,buftemp[i+3])-Base64Table;
binbyte[0]=((cpos[0]<<2)|(cpos[1]>>4));
binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2));
binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f));
decbuf[i-(i/4)]=binbyte[0];
decbuf[i-(i/4)+1]=binbyte[1];
decbuf[i-(i/4)+2]=binbyte[2];
i+=4;
}
free(buftemp);
if (bufsize%4==0)return bufsize*6/8;
if (bufsize%4==1)return((bufsize+3)*6/8)-3;
if (bufsize%4==2)return((bufsize+2)*6/8)-2;
if (bufsize%4==3)return((bufsize+1)*6/8)-1;
return -1;
}
#include <stdlib.h>//Base64Encod
//Encode string
//Param: buftoenc,input string to encode
// bufsize,input string length
// encbug, output string encoded
//Return value:Encoded string length??? if fail return -1???
int Base64Encod(char *buftoenc,int bufsize,char *encbuf)
{
int i=0;
int b64byte[5];
unsigned char *buftemp; //Allocate space for the temporary string
buftemp=(unsigned char *)malloc(bufsize+2);
strcpy(buftemp,buftoenc);
if (bufsize%3==1)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
}
if (bufsize%3==2)buftemp[bufsize]='\0';
while (i<bufsize)
{
b64byte[0]=buftemp[i]>>2;
b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
b64byte[3]=buftemp[i+2]&0x3F;
encbuf[i+(i/3)]=Base64Table[b64byte[0]];
encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
i+=3;
}
free(buftemp);
if (bufsize%3==0)return bufsize*8/6;
if (bufsize%3==1)return((bufsize+2)*8/6)-2;
if (bufsize%3==2)return((bufsize+1)*8/6)-1;
return -1;
} //Base64Decod
//Encode string
//Param: buftodec,input string to decode
// bufsize,input string length
// decbug, output string decoded
//Return value:Decoded string length??? if fail return -1???
int Base64Decod(char *buftodec, int bufsize, char *decbuf)
{
int i=0;
unsigned char binbyte[4];
int cpos[5];
unsigned char *buftemp; //Allocate space for the temporary string
buftemp=(unsigned char *)malloc(bufsize + 4);
strcpy((char*)buftemp,buftodec);
if (bufsize%4==1)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
buftemp[bufsize+2]='\0';
}
if (bufsize%4==2)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
}
if (bufsize%4==3)buftemp[bufsize]='\0';
while (i<bufsize)
{
cpos[0]=strchr(Base64Table,buftemp[i])-Base64Table;
cpos[1]=strchr(Base64Table,buftemp[i+1])-Base64Table;
cpos[2]=strchr(Base64Table,buftemp[i+2])-Base64Table;
cpos[3]=strchr(Base64Table,buftemp[i+3])-Base64Table;
binbyte[0]=((cpos[0]<<2)|(cpos[1]>>4));
binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2));
binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f));
decbuf[i-(i/4)]=binbyte[0];
decbuf[i-(i/4)+1]=binbyte[1];
decbuf[i-(i/4)+2]=binbyte[2];
i+=4;
}
free(buftemp);
if (bufsize%4==0)return bufsize*6/8;
if (bufsize%4==1)return((bufsize+3)*6/8)-3;
if (bufsize%4==2)return((bufsize+2)*6/8)-2;
if (bufsize%4==3)return((bufsize+1)*6/8)-1;
return -1;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货