using System; using System.Globalization; namespace TechBot.Library { public class NumberParser { public bool Error = false; private const string SpecialHexCharacters = "ABCDEF"; private static bool IsSpecialHexCharacter(char ch) { foreach (char specialChar in SpecialHexCharacters) { if (ch.ToString().ToUpper() == specialChar.ToString()) return true; } return false; } private static bool HasSpecialHexCharacters(string s) { foreach (char ch in s) { if (IsSpecialHexCharacter(ch)) return true; } return false; } public long Parse(string s) { try { Error = false; bool useHex = false; if (s.StartsWith("0x", StringComparison.InvariantCultureIgnoreCase)) { s = s.Substring(2); useHex = true; } if (HasSpecialHexCharacters(s)) useHex = true; if (useHex) return Int64.Parse(s, NumberStyles.HexNumber); else return Int64.Parse(s); } catch (FormatException) { Error = true; } catch (OverflowException) { Error = true; } return -1; } } }