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)); }
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()); }
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); }
/// <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()); }
/// <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()); }
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)); }
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); }
/// <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))); }
/// <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)); }
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())); }