传递十六进制字符串时long.TryParse失败

XXD*_*ger 2 c#

我是C#的新手,这个测试用例总是失败.l_sID的值是5509df4d0d557e15aca17902.它是一个十六进制值,我试图用它来匹配它.我知道它会失败,但我应该通过这个测试?

我尝试使用BigInteger,但显示错误.

无法找到类型或命名空间名称"BigInteger"(当我执行BigInteger l_lID = 0时,您是否缺少using指令或程序集引用;而不是long l_lID = 0;

 BigInteger l_lID= 0;
 if (!BigInteger.TryParse(l_sID, out l_lID))
 throw new Exception("Failed to Upload File "); 
Run Code Online (Sandbox Code Playgroud)

Eri*_* J. 9

5509df4d0d557e15aca17902

此十六进制值为24位,太大而无法解析为64位整数.

以供参考:

  • 最大字节0xFF(2位数)
  • 最大的UInt16 0xFFFF(4位数)
  • 最大的UInt32 0xFFFFFFFF(8位数)
  • 最大的UInt64 0xFFFFFFFFFFFFFFFF(16位)

我知道它会失败,但我应该通过这个测试?

如果不更改目标数据类型或输入值,则无法执行任何操作.

如果使用较小的十六进制数,则需要使用允许指定数字样式的TryParse重载.

bool result = Int64.TryParse(stringToConvert, NumberStyles.HexNumber,
                             CultureInfo.InvariantCulture, out number);
Run Code Online (Sandbox Code Playgroud)

我尝试使用BigInteger,但显示错误.

如果指定NumberStyle,BigInteger应该可以在.NET 4.0及更高版本中正常工作

bool result = BigInteger.TryParse(hexString,
                             NumberStyles.AllowHexSpecifier,
                             null, out number))
Run Code Online (Sandbox Code Playgroud)

无法找到类型或命名空间名称"BigInteger"(当我执行BigInteger l_lID = 0时,您是否缺少using指令或程序集引用;而不是long l_lID = 0

您需要将一个程序集引用添加到System.Runtime.Numerics(在System.Runtime.Numerics.dll中)并添加using System.Numerics;到C#文件的顶部.