示例:
var v = Text.ToString(long.MaxValue, 36);
var n = Text.ToInt64(v, 36);
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private static readonly string _keys = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static double ToDouble(string v, int radix) => BitConverter.Int64BitsToDouble(ToInt64(v, radix));
public static long ToInt64(string v, int radix) => (long)ToUInt64(v, radix);
public static ulong ToUInt64(string v, int radix)
{
if (string.IsNullOrEmpty(v))
{
return 0;
}
if (radix < 2)
{
radix = 10;
}
else if (radix > _keys.Length)
{
radix = _keys.Length;
}
ulong r = 0;
ulong p = (ulong)radix;
ulong b = 0;
for (int l = v.Length - 1, i = l; i > -1; i--)
{
char ch = v[i];
ulong k;
if (ch >= '0' && ch <= '9')
{
k = (ulong)(ch - '0');
}
else if (ch >= 'A' && ch <= 'Z')
{
k = 10 + (ulong)(ch - 'A');
}
else if (ch >= 'a' && ch <= 'z')
{
k = 10 + (ulong)(ch - 'a');
}
else
{
return 0;
}
if (k >= p)
{
return 0;
}
if (i == l)
{
r += k;
b = p;
}
else
{
r += k * b;
b = b * p;
}
}
return r;
}
public static string ToString(long v, int radix) => ToString(v, radix, 0);
public static string ToString(ulong v, int radix) => ToString(v, radix, 0);
public static string ToString(long v, int radix, int pading) => ToString(v, radix, pading, '0');
public static string ToString(ulong v, int radix, int pading) => ToString(v, radix, pading, '0');
public static string ToString(double v, int radix) => ToString(v, radix, 0);
public static string ToString(double v, int radix, int pading) => ToString(v, radix, pading, '0');
public static string ToString(double v, int radix, int pading, char paddingChar) => ToString(BitConverter.DoubleToInt64Bits(v), radix, pading, paddingChar);
public static string ToString(long v, int radix, int pading, char paddingChar) => ToString((ulong)v, radix, pading, paddingChar);
public static string ToString(ulong v, int radix, int pading, char paddingChar)
{
if (radix < 2)
{
radix = 10;
}
else if (radix > _keys.Length)
{
radix = _keys.Length;
}
uint p = (uint)radix;
string r;
if (v == 0)
{
r = "0";
}
else
{
r = string.Empty;
while (v > 0)
{
ulong n = v % p;
r = _keys[(int)n] + r;
v /= p;
}
}
if (pading > r.Length)
{
r = r.PadLeft(pading, paddingChar);
}
return r;
}