コード例 #1
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());
        }