由于十六进制通常只用于整数,您可以将parse字符串转换为最大整数类型(Int64)和change将结果类型转换为所需类型:
string hexString = "deadcafebabe0000";
long hexValue = long.Parse(hexString, NumberStyles.AllowHexSpecifier);
Type hexType = typeof(Int32);
object o = Convert.ChangeType(hexValue, hexType);
(请注意,在将字符串传递给 Parse 方法之前,您需要去掉 0x 前缀。)
Convert.ChangeType 本质上是一大堆if (type == ...) ... else if (type == ...) 语句。您可以创建一个字典,将所有整数类型映射到它们各自的 Parse 方法:
var dict = new Dictionary<Type, Func<string, object>>
{
{ typeof(byte), s => byte.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(sbyte), s => sbyte.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(short), s => short.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(ushort), s => ushort.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(int), s => int.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(uint), s => uint.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(long), s => long.Parse(s, NumberStyles.AllowHexSpecifier) },
{ typeof(ulong), s => ulong.Parse(s, NumberStyles.AllowHexSpecifier) },
};
string hexString = (-5).ToString("X");
Type hexType = typeof(Int32);
object o = dict[hexType](hexString);