2012-11-22 66 views
0

這真讓我困惑。在某個未知原因的程序中,計數器被存儲來跟蹤兩個數據庫之間的狀態。這僅僅是一個增量計數器。如何將此十六進制轉換爲整數?

的代碼存儲該計數器:

byte[] counter; 

當它被存儲在它被渲染到這樣的字符串數據庫...

0x00010471000001BF001F 

我想寫一個應用程序,它告訴如果一個人比另一個人高,以及輸入兩個數字的人數。但我不知道如何將這些數字轉換爲整數表示。

有人知道發生了什麼,如果這是可能的?

回答

4

由於數字是20個十六進制數字(80位),因此存儲在int(32位)或long(64位)中時太大。您可以在.NET 4.0或更高版本上使用BigInteger。 (在.NET 4.0必須添加到System.Numerics.dll的引用)

var bigint = new System.Numerics.BigInteger(counter) 

作爲島之風指出的那樣,在上述需要little-endian順序的字節數組,即新的字節[] {1, 0,0,0,0,0,0,0,0,0,0,0}將評估爲1.如有必要,請使用Array.Reverse來解決此問題。

既然你作爲一個字符串的數字,你應該使用BigInteger.Parse,不過請注意,你將不得不從一開始修剪「0X」

var bigint = System.Numerics.BigInteger.Parse("00010471000001BF001F", 
       System.Globalization.NumberStyles.HexNumber, 
       System.Globalization.CultureInfo.InvariantCulture); 
+1

這是最好的回答。但這裏需要注意的一點是,BigInteger構造函數需要按照小端順序排列字節數組。如果你的字節數組不是,那麼你首先需要使用'Array.Reverse(counter);'。 –

+0

謝謝你已經回答了這個問題,但你是否也知道我可以如何使用該字節已寫入的字符串?像Ox00010471000001BF001F這樣的字符串? – Exitos

0

根據this solution可以使用

int intNumber = int.Parse(counter,system.Globalization.NumberStyles.HexNumber);

+0

int可以保存最多4個字節,而不是10個,因爲這個問題需要。 –

相關問題