BaseNcoding.Base32.Encode C# (CSharp) Method

Encode() public method

public Encode ( byte data ) : string
data byte
return string
        public override string Encode(byte[] data)
        {
            int dataLength = data.Length;
            StringBuilder result = new StringBuilder((dataLength + 4) / 5 * 8);

            byte x1, x2;
            int i;

            int length5 = (dataLength / 5) * 5;
            for (i = 0; i < length5; i += 5)
            {
                x1 = data[i];
                result.Append(Alphabet[x1 >> 3]);

                x2 = data[i + 1];
                result.Append(Alphabet[((x1 << 2) & 0x1C) | (x2 >> 6)]);
                result.Append(Alphabet[(x2 >> 1) & 0x1F]);

                x1 = data[i + 2];
                result.Append(Alphabet[((x2 << 4) & 0x10) | (x1 >> 4)]);

                x2 = data[i + 3];
                result.Append(Alphabet[((x1 << 1) & 0x1E) | (x2 >> 7)]);
                result.Append(Alphabet[(x2 >> 2) & 0x1F]);

                x1 = data[i + 4];
                result.Append(Alphabet[((x2 << 3) & 0x18) | (x1 >> 5)]);
                result.Append(Alphabet[x1 & 0x1F]);
            }

            switch (dataLength - length5)
            {
                case 1:
                    x1 = data[i];
                    result.Append(Alphabet[x1 >> 3]);
                    result.Append(Alphabet[(x1 << 2) & 0x1C]);

                    result.Append(Special, 6);
                    break;
                case 2:
                    x1 = data[i];
                    result.Append(Alphabet[x1 >> 3]);
                    x2 = data[i + 1];
                    result.Append(Alphabet[((x1 << 2) & 0x1C) | (x2 >> 6)]);
                    result.Append(Alphabet[(x2 >> 1) & 0x1F]);
                    result.Append(Alphabet[(x2 << 4) & 0x10]);

                    result.Append(Special, 4);
                    break;
                case 3:
                    x1 = data[i];
                    result.Append(Alphabet[x1 >> 3]);
                    x2 = data[i + 1];
                    result.Append(Alphabet[((x1 << 2) & 0x1C) | (x2 >> 6)]);
                    result.Append(Alphabet[(x2 >> 1) & 0x1F]);
                    x1 = data[i + 2];
                    result.Append(Alphabet[((x2 << 4) & 0x10) | (x1 >> 4)]);
                    result.Append(Alphabet[(x1 << 1) & 0x1E]);

                    result.Append(Special, 3);
                    break;
                case 4:
                    x1 = data[i];
                    result.Append(Alphabet[x1 >> 3]);
                    x2 = data[i + 1];
                    result.Append(Alphabet[((x1 << 2) & 0x1C) | (x2 >> 6)]);
                    result.Append(Alphabet[(x2 >> 1) & 0x1F]);
                    x1 = data[i + 2];
                    result.Append(Alphabet[((x2 << 4) & 0x10) | (x1 >> 4)]);
                    x2 = data[i + 3];
                    result.Append(Alphabet[((x1 << 1) & 0x1E) | (x2 >> 7)]);
                    result.Append(Alphabet[(x2 >> 2) & 0x1F]);
                    result.Append(Alphabet[(x2 << 3) & 0x18]);

                    result.Append(Special);
                    break;
            }

            return result.ToString();
        }