using System.Collections.Generic; using System.Linq; using System.Text; namespace System { /// /// String extensions. /// public static class StringExtensions { /// /// Converts a hex string into a byte array. /// /// The hex encoded string. /// A delimiter between the bytes (e.g. for MAC address). /// The bytes. public static IEnumerable HexToBytes(this string hexString, string delimiter = "") { if (string.IsNullOrWhiteSpace(hexString)) yield break; string str = string.IsNullOrEmpty(delimiter) ? hexString : hexString.Replace(delimiter, ""); if (str.Length % 2 == 1) yield break; for (int i = 0; i < str.Length; i += 2) yield return Convert.ToByte(str.Substring(i, 2), 16); } /// /// Converts a byte collection into a hex string. /// /// The bytes. /// A delimiter to set between the bytes (e.g. for MAC address). /// The hex encoded string. public static string BytesToHex(this IEnumerable bytes, string delimiter = "") { if (bytes?.Any() != true) return null; return string.Join(delimiter, bytes.Select(b => b.ToString("x2"))); } /// /// Encodes a string to the hexadecimal system (base 16). /// /// /// /// public static string HexEncode(this string str, Encoding encoding = null) { if (string.IsNullOrEmpty(str)) return str; return (encoding ?? Encoding.Default).GetBytes(str).BytesToHex(); } /// /// Decodes a string from the hexadecimal system (base 16). /// /// /// /// public static string HexDecode(this string str, Encoding encoding = null) { if (string.IsNullOrEmpty(str)) return str; return (encoding ?? Encoding.Default).GetString(str.HexToBytes().ToArray()); } /// /// Encodes a string to base64. /// /// /// /// public static string Base64Encode(this string str, Encoding encoding = null) => Convert.ToBase64String((encoding ?? Encoding.Default).GetBytes(str)); /// /// Decodes a string from base64. /// /// /// /// public static string Base64Decode(this string str, Encoding encoding = null) => (encoding ?? Encoding.Default).GetString(Convert.FromBase64String(str)); /// /// Replaces the search substring with the replacement when it was found at the beginning of the string. /// /// The string. /// The searched substring. /// The replacement. /// public static string ReplaceStart(this string str, string search, string replacement) { if (str.StartsWith(search)) return replacement + str.Substring(search.Length); return str; } /// /// Replaces the search substring with the replacement when it was found at the end of the string. /// /// The string. /// The searched substring. /// The replacement. /// public static string ReplaceEnd(this string str, string search, string replacement) { if (str.EndsWith(search)) return str.Substring(0, str.Length - search.Length) + replacement; return str; } } }