Code
1
// Base 64 encoder / decoder
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
//---------------------------------------------------------------------------
5![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
7![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
AnsiString __fastcall TForm1::Base64Encode(AnsiString slToEnc)
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
11![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
12
//The Base64 Table
13![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
14
const char Base64Table[64]=
15![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
16
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
17![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
18
char * buftoenc = slToEnc.c_str();
19![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
20
int bufsize = slToEnc.Length() + 1;
21![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
22
char * encbuf = new char[slToEnc.Length() * 5];
23![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
24
encbuf[0] = '\0'; int ilStrLen = -1;
25![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
26
int i=0; int b64byte[5];
27![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
28
unsigned char *buftemp;
29![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
AnsiString slRetVal = EmptyStr;
31![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
32
33![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
35![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
36
buftemp=(unsigned char *)malloc(bufsize+2);
37![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
strcpy(buftemp,buftoenc);
39![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
40
if (fmod(bufsize,3)==1)
41![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
42![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
43![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
buftemp[bufsize]='\0';
45![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
46
buftemp[bufsize+1]='\0';
47![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
48
}
49![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
50
if (fmod(bufsize,3)==2)buftemp[bufsize]='\0';
51![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
52
while (i<bufsize)
53![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
55![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
56
b64byte[0]=buftemp[i]>>2;
57![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
58
b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
59![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
61![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
b64byte[3]=buftemp[i+2]&0x3F;
63![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
64
encbuf[i+(i/3)]=Base64Table[b64byte[0]];
65![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
66
encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
67![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
68
encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
69![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
71![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
72
i+=3;
73![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
74
}
75![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
free(buftemp);
77![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
78
79![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
80
81![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
82
if (fmod(bufsize,3)==0) ilStrLen = bufsize*8/6;
83![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
else if (fmod(bufsize,3)==1) ilStrLen = ((bufsize+2)*8/6)-2;
85![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
86
else if (fmod(bufsize,3)==2) ilStrLen = ((bufsize+1)*8/6)-1;
87![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
88
else ilStrLen = -1;
89![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
if(ilStrLen> 0) slRetVal = AnsiString(encbuf).SubString(1, ilStrLen);
91![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
92![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(encbuf != NULL)
{ delete encbuf; encbuf = NULL; }
93![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94
95![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96
return slRetVal;
97![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
98
}
99![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
101![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
103![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
//-----------------------------------------------------------------------
105![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
AnsiString __fastcall TForm1::Base64Decode(AnsiString slToDec)
108![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
110![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
111
//Base64 Table
112![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
const char Base64Table[64]=
114![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
116![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
char * buftodec = slToDec.c_str();
118![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
int bufsize = slToDec.Length() + 1;
120![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
char * decbuf = new char[slToDec.Length() * 5];
122![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
decbuf[0] = '\0'; int ilStrLen = -1;
124![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
AnsiString slRetVal = EmptyStr;
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
128![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
int i=0; unsigned char binbyte[4];
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
int cpos[5]; unsigned char *buftemp;
132![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
134![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
135
buftemp=(unsigned char *)malloc(bufsize);
136![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
137
strcpy(buftemp,buftodec);
138![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
139
if (fmod(bufsize,4)==1)
140![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
141![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
142![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
143
buftemp[bufsize]='\0';
144![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
145
buftemp[bufsize+1]='\0';
146![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
147
buftemp[bufsize+2]='\0';
148![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
149
}
150![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
151
if (fmod(bufsize,4)==2)
152![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
153![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
154![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
buftemp[bufsize]='\0';
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
buftemp[bufsize+1]='\0';
158![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
}
160![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
if (fmod(bufsize,4)==3)buftemp[bufsize]='\0';
162![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163
while (i<bufsize)
164![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
165![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
166![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
167
cpos[0]=strchr(Base64Table,buftemp[i])-Base64Table;
168![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
169
cpos[1]=strchr(Base64Table,buftemp[i+1])-Base64Table;
170![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
171
cpos[2]=strchr(Base64Table,buftemp[i+2])-Base64Table;
172![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
173
cpos[3]=strchr(Base64Table,buftemp[i+3])-Base64Table;
174![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
175
binbyte[0]=((cpos[0]<<2)|(cpos[1]>>4));
176![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
177
binbyte[1]=((cpos[1]<<4)|(cpos[2]>>2));
178![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
179
binbyte[2]=(((cpos[2]&0x03)<<6)|(cpos[3]&0x3f));
180![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
181
decbuf[i-(i/4)]=binbyte[0];
182![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
183
decbuf[i-(i/4)+1]=binbyte[1];
184![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
185
decbuf[i-(i/4)+2]=binbyte[2];
186![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
187
i+=4;
188![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
189
}
190![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
191
free(buftemp);
192![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
193
if (fmod(bufsize,4)==0) ilStrLen = bufsize*6/8;
194![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
195
else if (fmod(bufsize,4)==1) ilStrLen = ((bufsize+3)*6/8)-3;
196![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
197
else if (fmod(bufsize,4)==2) ilStrLen = ((bufsize+2)*6/8)-2;
198![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
199
else if (fmod(bufsize,4)==3) ilStrLen = ((bufsize+1)*6/8)-1;
200![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
201
else ilStrLen = -1;
202![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
203
if(ilStrLen> 0) slRetVal = AnsiString(decbuf).SubString(1, ilStrLen);
204![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
205![ExpandedSubBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(decbuf != NULL)
{ delete decbuf; decbuf = NULL; }
206![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
207
return slRetVal;
208![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
209
}
210
转载于:https://www.cnblogs.com/tecsun/archive/2008/12/11/1352500.html