public override string Encode(byte[] data)
{
int dataLength = data.Length;
StringBuilder result = new StringBuilder((dataLength + 2) / 3 * 2 + 1);
int i;
int x1, x2, x3;
int length3 = (dataLength / 3) * 3;
for (i = 0; i < length3; i += 3)
{
x1 = data[i];
x2 = data[i + 1];
x3 = data[i + 2];
result.Append(Alphabet[x1 | ((x2 & 0x0F) << 8)]);
result.Append(Alphabet[(x2 >> 4) | (x3 << 4)]);
}
switch (dataLength - length3)
{
case 1:
x1 = data[i];
result.Append(Alphabet[x1]);
result.Append(Special, 2);
break;
case 2:
x1 = data[i];
x2 = data[i + 1];
result.Append(Alphabet[x1 | ((x2 & 0x0F) << 8)]);
result.Append(Alphabet[x2 >> 4]);
result.Append(Special);
break;
}
return result.ToString();
}