// converts bytes to BASE64 representation void base64(Firebird::string& b64, const Firebird::UCharBuffer& bin) { b64.erase(); const unsigned char* f = bin.begin(); for (int i = bin.getCount(); i > 0; i -= 3, f += 3) { if (i >= 3) { const ULONG l = (ULONG(f[0]) << 16) | (ULONG(f[1]) << 8) | f[2]; b64 += conv_bin2ascii(l >> 18); b64 += conv_bin2ascii(l >> 12); b64 += conv_bin2ascii(l >> 6); b64 += conv_bin2ascii(l); } else { ULONG l = ULONG(f[0]) << 16; if (i == 2) l |= (ULONG(f[1]) << 8); b64 += conv_bin2ascii(l >> 18); b64 += conv_bin2ascii(l >> 12); b64 += (i == 1 ? '=' : conv_bin2ascii(l >> 6)); b64 += '='; } }