reactos/irc/TechBot/TechBot.Library/NumberParser.cs

63 lines
1.2 KiB
C#
Raw Normal View History

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;
}
}
}