這真讓我困惑。在某個未知原因的程序中,計數器被存儲來跟蹤兩個數據庫之間的狀態。這僅僅是一個增量計數器。如何將此十六進制轉換爲整數?
的代碼存儲該計數器:
byte[] counter;
當它被存儲在它被渲染到這樣的字符串數據庫...
0x00010471000001BF001F
我想寫一個應用程序,它告訴如果一個人比另一個人高,以及輸入兩個數字的人數。但我不知道如何將這些數字轉換爲整數表示。
有人知道發生了什麼,如果這是可能的?
這真讓我困惑。在某個未知原因的程序中,計數器被存儲來跟蹤兩個數據庫之間的狀態。這僅僅是一個增量計數器。如何將此十六進制轉換爲整數?
的代碼存儲該計數器:
byte[] counter;
當它被存儲在它被渲染到這樣的字符串數據庫...
0x00010471000001BF001F
我想寫一個應用程序,它告訴如果一個人比另一個人高,以及輸入兩個數字的人數。但我不知道如何將這些數字轉換爲整數表示。
有人知道發生了什麼,如果這是可能的?
由於數字是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);
根據this solution可以使用
int intNumber = int.Parse(counter,system.Globalization.NumberStyles.HexNumber);
int可以保存最多4個字節,而不是10個,因爲這個問題需要。 –
這是最好的回答。但這裏需要注意的一點是,BigInteger構造函數需要按照小端順序排列字節數組。如果你的字節數組不是,那麼你首先需要使用'Array.Reverse(counter);'。 –
謝謝你已經回答了這個問題,但你是否也知道我可以如何使用該字節已寫入的字符串?像Ox00010471000001BF001F這樣的字符串? – Exitos