/// <summary> /// Converts a value to a string based on this ParameterTemplate's type. /// </summary> public string ValueToString(object val) { if (EnumEntries != null) { if (EnumEntries.Values.Contains(val)) { return(EnumEntries.First(x => x.Value.Equals(val)).Key); } } switch (Type) { case ParamType.aob: return(string.Join(" ", ((byte[])val).Select(b => b.ToString("X2")))); case ParamType.x8: return(((byte)val).ToString("X2")); case ParamType.x16: return(((ushort)val).ToString("X4")); case ParamType.x32: return(((uint)val).ToString("X8")); case ParamType.x64: return(((ulong)val).ToString("X16")); case ParamType.b: return(((bool)val) ? "True" : "False"); default: return(val.ToString()); } }
public override bool Parse() { bool result = false; if (_source.Attributes != null) { UniqueId = _source.Attributes["uniqueID"].InnerXml; Name = _source.Attributes["name"].InnerXml; } foreach (XmlNode childNode in _source) { if (childNode.Name == "dataType") { DataType = new XddDataType(childNode, _dataTypeList); result = DataType.Parse(); } else if (childNode.Name == "enumEntry") { var enumEntry = new XddEnumEntry(childNode); result = enumEntry.Parse(); EnumEntries.Add(enumEntry); } } return(result); }
/// <summary> /// Converts a string to a value based on this ParameterTemplate's type. /// </summary> public object StringToValue(string str) { if (str == null) { return(null); } IEnumerable <string> GetArrayFromSingleLineString(string s) { return(s.Split(' ') .Where(st => !string.IsNullOrWhiteSpace(st)) .Select(st => st.Trim())); } List <string> GetArrayFromString(string s) { List <string> result = new List <string>(); var lines = s.Split('\n'); foreach (var l in lines) { result.AddRange(GetArrayFromSingleLineString(l.Replace("\r", "").Replace("\n", "").Replace("\t", ""))); } return(result); } // Convert a string enum value to the actual numeric value. if (EnumEntries != null) { if (EnumEntries.ContainsKey(str)) { str = EnumEntries[str].ToString(); } } switch (Type) { case ParamType.aob: return(GetArrayFromString(str).Select(b => byte.Parse(b, System.Globalization.NumberStyles.HexNumber)).ToArray()); case ParamType.u8: return(byte.Parse(str)); case ParamType.x8: return(byte.Parse(str, System.Globalization.NumberStyles.HexNumber)); case ParamType.s8: return(sbyte.Parse(str)); case ParamType.u16: return(ushort.Parse(str)); case ParamType.x16: return(ushort.Parse(str, System.Globalization.NumberStyles.HexNumber)); case ParamType.s16: return(short.Parse(str)); case ParamType.u32: return(uint.Parse(str)); case ParamType.x32: return(uint.Parse(str, System.Globalization.NumberStyles.HexNumber)); case ParamType.s32: return(int.Parse(str)); case ParamType.u64: return(ulong.Parse(str)); case ParamType.x64: return(ulong.Parse(str, System.Globalization.NumberStyles.HexNumber)); case ParamType.s64: return(long.Parse(str)); case ParamType.f32: return(float.Parse(str)); case ParamType.f64: return(double.Parse(str)); case ParamType.b: string toLower = str.ToLower().Trim(); if (toLower == "true") { return(true); } else if (toLower == "false") { return(false); } else { throw new FormatException("Boolean value must be either 'True' or 'False', case-insensitive."); } default: throw new Exception($"Invalid ParamTemplate ParamType: {Type.ToString()}"); } }