183{
185
186 size_t nAllocLength = ((_str.length() + 2) / 3) * 4;
188
189 ByteBuffer* buf = ByteBuffer::create(nAllocLength);
191
193 size_t len = _str.length();
194 for(size_t i = 1; len >= 3; len -= 3, src += 3) {
195 *dest++ = __base64Table__[src[0] >> 2];
196 *dest++ = __base64Table__[((src[0] & 0x03) << 4) + (src[1] >> 4)];
197 *dest++ = __base64Table__[((src[1] & 0x0f) << 2) + (src[2] >> 6)];
198 *dest++ = __base64Table__[src[2] & 0x3f];
199 if ((i++) == 19) {
200
203 i = 1;
204 }
205 }
206
207 if (len) {
208 *dest++ = __base64Table__[src[0] >> 2];
209 if (len > 1) {
210 *dest++ = __base64Table__[((src[0] & 0x03) << 4) + (src[1] >> 4)];
211 *dest++ = __base64Table__[((src[1] & 0x0f) << 2)];
213 }
214 else {
215 *dest++ = __base64Table__[((src[0] & 0x03) << 4)];
218 }
219 }
220
223
226 buf->__dataLength = (char*) dest - buf->data();
228
230 buf->release();
232}
#define __DCL_ASSERT(expr)
#define BASE64_PADDING_CHAR