public override string toBase64()
{
StringBuilder s = new StringBuilder(m_size*2);
char[] base64chars = Buf.base64chars;
int i = 0;
// append full 24-bit chunks
int end = m_size-2;
for (; i<end; i += 3)
{
int c = m_buf[i];
int n = ((m_buf[i] & 0xff) << 16) + ((m_buf[i+1] & 0xff) << 8) + (m_buf[i+2] & 0xff);
s.Append(base64chars[(n >> 18) & 0x3f]);
s.Append(base64chars[(n >> 12) & 0x3f]);
s.Append(base64chars[(n >> 6) & 0x3f]);
s.Append(base64chars[n & 0x3f]);
}
// pad and encode remaining bits
int rem = m_size - i;
if (rem > 0)
{
int n = ((m_buf[i] & 0xff) << 10) | (rem == 2 ? ((m_buf[m_size-1] & 0xff) << 2) : 0);
s.Append(base64chars[(n >> 12) & 0x3f]);
s.Append(base64chars[(n >> 6) & 0x3f]);
s.Append(rem == 2 ? base64chars[n & 0x3f] : '=');
s.Append('=');
}
return s.ToString();
}