Esempio n. 1
0
        public static string LengthDecode(this string str)
        {
            if (str.IsNullOrEmpty() || str.Length < 4)
            {
                return(null);
            }

            string value = str.GetFirst(4);

            Int32 length = Int32Ex.FromStringValue(value);

            if (length == -1)
            {
                return(null);
            }
            if (length == 0)
            {
                return("");
            }

            if (str.Length < length + 4)
            {
                return(null);
            }

            return(str.RemoveFirst(4).GetFirst(length));
        }
Esempio n. 2
0
        public static byte[] ToByteArrayFromString(string str)
        {
            if (str.IsNullOrEmpty())
            {
                return(null);
            }

            int mod4 = str.Length % 4;

            if (mod4 > 0)
            {
                str += new string('*', 4 - mod4);
            }

            byte[] data = Convert.FromBase64String(str);

            if (data.Length < 4)
            {
                return(null);
            }

            int length = Int32Ex.FromBytes(data);

            if (length == 0)
            {
                return(new byte[0]);
            }

            if (length < 0 || data.Length < 4 + length)
            {
                return(null);
            }

            return(data.Skip(4).Take(length).ToArray());
        }
Esempio n. 3
0
        public static string ToStringValue(Int32 value)
        {
            byte[] bytes = Int32Ex.ToBytes(value);

            string result = string.Empty;

            foreach (byte b in bytes)
            {
                result += (char)b;
            }

            return(result);// System.Text.Encoding.UTF8.GetString(bytes);
        }
Esempio n. 4
0
        /// <summary>
        /// encodes string into [length][data] array
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static byte[] GetBytesEncoded(this string str)
        {
            if (str == null)
            {
                return(null);
            }

            List <byte> buff = new List <byte>();

            buff.AddRange(str.GetBytes());
            buff.AddToStart(Int32Ex.ToBytes(buff.Count)); //save mode
            return(buff.ToArray());
        }
Esempio n. 5
0
        /// <summary>
        /// Encodes length into array - encodes bytes into [length][data] array
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static byte[] EncodeWithLength(this byte[] data)
        {
            if (data == null)
            {
                return(null);
            }

            List <byte> buff = new List <byte>();

            buff.AddRange(Int32Ex.ToBytes(data.Length));
            buff.AddRange(data);
            return(buff.ToArray());
        }
Esempio n. 6
0
        public static Int32 FromStringValue(string value)
        {
            if (value.IsNullOrEmpty() || value.Length < 4)
            {
                throw new Exception("value is to small to contain any value");
            }

            byte[] bytes = new byte[4];
            for (int i = 0; i < bytes.Length; i++)
            {
                bytes[i] = (byte)value[i];
            }

            //byte[] bytes = System.Text.Encoding.UTF8.GetBytes(value);
            return(Int32Ex.FromBytes(bytes));
        }
Esempio n. 7
0
        public static string LengthEncode(this string str)
        {
            Int32 length;

            if (str == null)
            {
                length = -1;
            }
            else
            {
                length = str.Length;
            }

            str = Int32Ex.ToStringValue(length) + str;
            return(str);
        }
Esempio n. 8
0
        /// <summary>
        /// decodes bytes into string from [some offset bytes][length][data][other bytes] array
        /// </summary>
        /// <param name="array"></param>
        /// <param name="offset"></param>
        /// <returns></returns>
        public static string GetStringDecoded(this byte[] array, int offset)
        {
            if (array == null)
            {
                return(null);
            }

            int length = Int32Ex.FromBytes(array, offset);

            if (length < 0 || length > array.Length + 4 + offset)
            {
                return(null);
            }

            return(stringEx.GetString(array.SubArray(4 + offset, length)));
        }
Esempio n. 9
0
        /// <summary>
        /// Decodes array using encoded length - decodes bytes into bytes from [some offset bytes][length][data][other bytes] array
        /// </summary>
        /// <param name="array"></param>
        /// <param name="offset"></param>
        /// <returns></returns>
        public static byte[] DecodeWithLength(this byte[] array, int offset)
        {
            if (array == null || array.Length < 4)
            {
                return(null);
            }

            int length = Int32Ex.FromBytes(array, offset);

            if (length < 0 || length > array.Length + 4 + offset)
            {
                return(null);
            }
            else if (length == 0)
            {
                return(new byte[0]);
            }

            return(array.SubArray(4 + offset, length));
        }
Esempio n. 10
0
        public static string ToStringFromByteArray(byte[] bytes)
        {
            if (bytes == null)
            {
                return(null);
            }

            byte[] length = Int32Ex.ToBytes(bytes.Length);

            List <byte> data = new List <byte>();

            data.AddRange(length);
            data.AddRange(bytes);

            while (data.Count % 8 != 0)
            {
                data.Add(0);
            }

            return(Convert.ToBase64String(data.ToArray()));
        }