public static byte[] TryParse(string bytesString, BytesDisplayFormat format) { if (bytesString == null) { return(null); } switch (format) { case BytesDisplayFormat.Auto: case BytesDisplayFormat.None: return(null); case BytesDisplayFormat.Utf8: return(Encoding.UTF8.GetBytes(bytesString)); case BytesDisplayFormat.Utf16: return(Encoding.Unicode.GetBytes(bytesString)); case BytesDisplayFormat.Utf16Be: return(Encoding.BigEndianUnicode.GetBytes(bytesString)); case BytesDisplayFormat.Decimal: case BytesDisplayFormat.Hexadecimal: break; default: throw new NotImplementedException("Format parsing not implemented."); } var parts = bytesString.Split(new[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries); var bytesList = new List <byte>(); foreach (var part in parts) { var str = part; if (str.ToLowerInvariant().StartsWith("0x") && format == BytesDisplayFormat.Hexadecimal) { str = part.ToLowerInvariant().Replace("0x", string.Empty); } byte result; if (byte.TryParse(str, format == BytesDisplayFormat.Hexadecimal ? NumberStyles.HexNumber : NumberStyles.Integer, CultureInfo.InvariantCulture, out result)) { bytesList.Add(result); } else { throw new FormatException($"Can't parse '{part}' as { format.AsString() }"); } } if (bytesList.Count == 0) { return(null); } return(bytesList.ToArray()); }