Ejemplo n.º 1
0
        private static StringBuilder EncodeWorker(string data, char empty, EncodeChar encFunc)
        {
            StringBuilder res = new StringBuilder();

            int bits;

            for (int i = 0; i < data.Length; i += 3)
            {
                switch (data.Length - i)
                {
                case 1:
                    // only one char, emit 2 bytes &
                    // padding
                    bits = (data[i] & 0xff) << 16;
                    res.Append(encFunc((bits >> 18) & 0x3f));
                    res.Append(encFunc((bits >> 12) & 0x3f));
                    res.Append(empty);
                    res.Append(empty);
                    break;

                case 2:
                    // only two chars, emit 3 bytes &
                    // padding
                    bits = ((data[i] & 0xff) << 16) | ((data[i + 1] & 0xff) << 8);
                    res.Append(encFunc((bits >> 18) & 0x3f));
                    res.Append(encFunc((bits >> 12) & 0x3f));
                    res.Append(encFunc((bits >> 6) & 0x3f));
                    res.Append(empty);
                    break;

                default:
                    // got all 3 bytes, just emit it.
                    bits = ((data[i] & 0xff) << 16) |
                           ((data[i + 1] & 0xff) << 8) |
                           ((data[i + 2] & 0xff));
                    res.Append(encFunc((bits >> 18) & 0x3f));
                    res.Append(encFunc((bits >> 12) & 0x3f));
                    res.Append(encFunc((bits >> 6) & 0x3f));
                    res.Append(encFunc(bits & 0x3f));
                    break;
                }
            }
            return(res);
        }
Ejemplo n.º 2
0
        private static StringBuilder EncodeWorker(string data, int lineBreak, char empty, EncodeChar encFunc) {
            StringBuilder res = new StringBuilder();

            int bits;
            int lineCount = 0;
            for (int i = 0; i < data.Length; i += 3) {
                switch (data.Length - i) {
                    case 1:
                        // only one char, emit 2 bytes &
                        // padding
                        bits = (data[i] & 0xff) << 16;
                        res.Append(encFunc((bits >> 18) & 0x3f));
                        res.Append(encFunc((bits >> 12) & 0x3f));
                        res.Append(empty);
                        res.Append(empty);
                        break;
                    case 2:
                        // only two chars, emit 3 bytes &
                        // padding
                        bits = ((data[i] & 0xff) << 16) | ((data[i + 1] & 0xff) << 8);
                        res.Append(encFunc((bits >> 18) & 0x3f));
                        res.Append(encFunc((bits >> 12) & 0x3f));
                        res.Append(encFunc((bits >> 6) & 0x3f));
                        res.Append(empty);
                        break;
                    default:
                        // got all 3 bytes, just emit it.
                        bits = ((data[i] & 0xff) << 16) |
                            ((data[i + 1] & 0xff) << 8) |
                            ((data[i + 2] & 0xff));
                        res.Append(encFunc((bits >> 18) & 0x3f));
                        res.Append(encFunc((bits >> 12) & 0x3f));
                        res.Append(encFunc((bits >> 6) & 0x3f));
                        res.Append(encFunc(bits & 0x3f));
                        break;
                }
                if (((res.Length - (lineCount)) % lineBreak) == 0) {
                    res.Append('\n');
                    lineCount++;
                }
            }
            return res;
        }