コード例 #1
0
ファイル: BytesFormatting.cs プロジェクト: wearrocena/BleLab
        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");
            }
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
ファイル: BytesFormatting.cs プロジェクト: wearrocena/BleLab
        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());
        }
コード例 #4
0
 public BytesDisplayFormatViewModel(BytesDisplayFormat displayFormat)
 {
     _displayFormat = displayFormat;
 }