public static string AsString(this byte[] bytes, BytesDisplayFormat format = BytesDisplayFormat.Decimal) { if (bytes == null) { return("<no value>"); } if (bytes.Length == 0) { return("<empty array>"); } switch (format) { case BytesDisplayFormat.Decimal: return(string.Join(" ", bytes.Select(t => t.ToString("D2")))); case BytesDisplayFormat.Hexadecimal: return(string.Join(" ", bytes.Select(t => t.ToString("X2")))); case BytesDisplayFormat.Utf8: return(Encoding.UTF8.GetString(bytes)); case BytesDisplayFormat.Utf16: return(Encoding.Unicode.GetString(bytes)); case BytesDisplayFormat.Utf16Be: return(Encoding.BigEndianUnicode.GetString(bytes)); default: throw new ArgumentOutOfRangeException(nameof(format), format, "Invalid format for bytes formatter"); } }
public static string AsString(this BytesDisplayFormat format) { switch (format) { case BytesDisplayFormat.Auto: return("Auto"); case BytesDisplayFormat.Decimal: return("Decimal"); case BytesDisplayFormat.Hexadecimal: return("Hex"); case BytesDisplayFormat.Utf8: return("UTF8"); case BytesDisplayFormat.Utf16: return("UTF16"); case BytesDisplayFormat.Utf16Be: return("UTF16BE"); default: throw new ArgumentOutOfRangeException(nameof(format), format, null); } }
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()); }
public BytesDisplayFormatViewModel(BytesDisplayFormat displayFormat) { _displayFormat = displayFormat; }