示例#1
0
        /// <summary>Encodes the specified data.</summary>
        /// <param name="data">The data to encode.</param>
        public override string Encode(byte[] data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            var result = new List <char>(data.Length * 2);
            var value  = 0;
            var bits   = 0;

            foreach (var b in data)
            {
                value = (value << 8) | b;
                bits += 8;
                while (bits >= bitCount)
                {
                    bits -= bitCount;
                    var outValue = value >> bits;
                    value &= ~(0xFFFF << bits);
                    result.Add(CharacterDictionary.GetCharacter(outValue));
                }
            }

            if (bits > bitCount)
            {
                bits -= bitCount;
                var outValue = value >> bits;
                value &= ~(0xFFFF << bits);
                result.Add(CharacterDictionary.GetCharacter(outValue));
            }

            if (bits > 0)
            {
                var shift    = bitCount - bits;
                var outValue = value << shift;
                result.Add(CharacterDictionary.GetCharacter(outValue));
                bits -= bitCount;
            }

            if (Padding != null)
            {
                var padding = (char)Padding;
                while ((bits % 8) != 0)
                {
                    result.Add(padding);
                    bits -= bitCount;
                }
            }

            return(new string(result.ToArray()));
        }
示例#2
0
        /// <summary>
        /// Encodes the specified data
        /// </summary>
        /// <param name="data">The data to encode</param>
        public override string Encode(byte[] data)
        {
            List <char> result = new List <char>(data.Length * 2);
            int         value  = 0;
            int         bits   = 0;

            foreach (byte b in data)
            {
                value = (value << 8) | b;
                bits += 8;
                while (bits >= BitCount)
                {
                    bits -= BitCount;
                    int outValue = value >> bits;
                    value = value & ~(0xFFFF << bits);
                    result.Add(CharacterDictionary.GetCharacter(outValue));
                }
            }
            if (bits >= BitCount)
            {
                bits -= BitCount;
                int outValue = value >> bits;
                value = value & ~(0xFFFF << bits);
                result.Add(CharacterDictionary.GetCharacter(outValue));
            }
            if (bits > 0)
            {
                int shift    = BitCount - bits;
                int outValue = value << shift;
                result.Add(CharacterDictionary.GetCharacter(outValue));
                bits -= BitCount;
            }
            if (m_Padding != null)
            {
                char padding = (char)m_Padding;
                while (bits % 8 != 0)
                {
                    result.Add(padding);
                    bits -= BitCount;
                }
            }
            return(new string(result.ToArray()));
        }