2015-04-29 65 views
2

我是C#的新手,並且此測試用例總是失敗。 l_sID的值是5509df4d0d557e15aca17902。它是一個十六進制值,我試圖用long來匹配它。我知道它會失敗,但我該怎麼做通過這個測試?long.TryParse在傳遞十六進制字符串時失敗

我試着用BigInteger,但它顯示錯誤。

類型或命名空間名稱 「的BigInteger」 couldnot找到(是否缺少using指令或程序集refernce當我做的BigInteger l_lID = 0;而不是長期l_lID = 0;

BigInteger l_lID= 0; 
if (!BigInteger.TryParse(l_sID, out l_lID)) 
throw new Exception("Failed to Upload File "); 
+1

你不能使用很長的字母數字序列...... –

+1

你有沒有簽出MSDN呢? [如何在十六進制字符串和數字類型之間轉換](https://msdn.microsoft.com/zh-cn/library/bb311038.aspx) – JasonWilczak

+0

謝謝。絕對是新事物。 –

回答

9

5509df4d0d557e15aca17902

這十六進制值24個位數,過大而被解析爲一個64位的整數。

參考:

  • 最大字節0xFF的(2位)
  • 最大UINT16 0xFFFF的(4位)
  • 最大UInt32的0xFFFFFFFF的(8位)
  • 最大UINT64 0xFFFFFFFFFFFFFFFF(16位)

我知道它會失敗,但我該怎麼做通過這個測試?

在沒有改變目標數據類型或輸入值的情況下,你無能爲力。

如果使用較小的十六進制數字,則需要使用允許指定數字樣式的TryParse overload

bool result = Int64.TryParse(stringToConvert, NumberStyles.HexNumber, 
          CultureInfo.InvariantCulture, out number); 

我試着用的BigInteger但它顯示錯誤。

的BigInteger應該正常工作在.NET 4.0和更高版本,如果你specify the NumberStyle

bool result = BigInteger.TryParse(hexString, 
          NumberStyles.AllowHexSpecifier, 
          null, out number)) 

類型或命名空間名稱 「的BigInteger」 couldnot找到(是否缺少using指令或程序集refernce當我做的BigInteger l_lID = 0;而不是長期l_lID = 0

您需要的程序集引用添加到System.Runtime.Numerics(在System.Runtime.Numerics.dll)和廣告d using System.Numerics;添加到C#文件的頂部。

+0

我無法更改目標數據類型,但是可以更改輸入值。我嘗試了bigint而不是漫長的。但它顯示錯誤。 – PSDebugger

+0

如果您指定了適當的NumberStyles,則BitInteger將起作用。查看更新的答案。 –

+0

無法找到類型或名稱空間名稱「BigInteger」(當我執行BigInteger l_lID = 0時,是否缺少使用指令或程序集引用;而不是long l_lID = 0; – PSDebugger

相關問題