为什么十进制和十六进制之间的转换抛出了一个形式感觉?

时间:2013-12-18 19:11:48

标签: c# .net hex decimal .net-4.5

当我编译并运行以下代码时,它会抛出以下异常:

  

未处理的异常:System.FormatException:指定的格式“X”无效     在System.NumberFormatter.NumberToString(System.String format,System.Globalization.NumberFormatInfo nfi)[0x00000] in:0     at System.NumberFormatter.NumberToString(System.String format,Decimal value,IFormatProvider fp)[0x00000] in:0     在System.Decimal.ToString(System.String格式,IFormatProvider提供程序)[0x00000] in:0     在System.Decimal.ToString(System.String格式)[0x00000]中:0     在Program.Main()

using System;

class Program
{
    static void Main()
    {
        decimal result = 1454787509433225637;

                    //both these lines throw a formatexception
        Console.WriteLine(result.ToString("X"));
                    Console.WriteLine(string.Format("{0:x}", result));
    }
}

为什么会这样?根据{{​​3}},这应该编译好(并输出“14307188337151A5”)。

2 个答案:

答案 0 :(得分:6)

基于MSDN article的X格式类型,您只能使用积分类型。

  

结果:十六进制字符串。   支持者:仅限积分类型。   精度说明符:结果字符串中的位数。更多   信息:HexaDecimal(“X”)格式说明符。

因此,您需要指定 int 而不是十进制。因为十六进制格式仅存在于整数值。

答案 1 :(得分:1)

将您的代码更改为:

int result = 1454787509433225637;