2015-10-09 119 views
-2

如何在大字符串上執行算術加法和減法。例如,我有以下的十六進制字符串大十六進制字符串的算術加法和減法

string a1="B91EFEBFBDBDBFEFF39ABEE"; 
string a2="000FFFFFFFFFFFFFFFFFEEE"; 

然後我想要做算術加法A1 + A2得到的總和,而不是字符串連接。

然後算術減法例如sum-a2返回字符串a1。

我試圖做

Int64 parseda1 = Int64.Parse(a1); 
Int64 parseda2 = Int64.Parse(a2); 
Int64 xyz = abc + abc; 
MessageBox.Show(xyz.ToString("X"));// may be error in this as well 

它trows例外,輸入字符串的不正確的格式。

+3

我不明白,你的字符串包含'x'和'k',這是一個數字? –

+0

Int64.TryParse()將允許您毫無例外地進行解析 –

+0

這些字符串中的任何一個都不代表整數(整數)。這就是爲什麼你得到輸入字符串不是在一個正確的格式異常。添加或減少這兩個字符串的預期結果是什麼? – Tim

回答

3

如果你想真的是大數字,你可以使用BigInteger結構,它代表一個任意大的有符號整數。試試這個:

string a1 = "B91EFEBFBDBDBFEFF39ABEE"; 
string a2 = "000FFFFFFFFFFFFFFFFFEEE"; 
BigInteger num1 = BigInteger.Parse(a1, NumberStyles.HexNumber); 
BigInteger num2 = BigInteger.Parse(a2, NumberStyles.HexNumber); 
BigInteger sum = num1 + num2; 
Console.WriteLine(sum.ToString("X")); 
Console.WriteLine((sum - num2).ToString("X")); //gets a1 

編輯: 看起來num1爲我們提供了一個負數。這可能不是你想要的。爲了解決這個問題,讀:MSDN: BigInteger.Parse Method

「如果值是一個十六進制字符串,則解析(字符串,的NumberStyles) 方法解釋的值作爲通過使用兩個的 補碼錶示,如果它的第一個兩個十六進制數是存儲一負數 大於或等於0x80。換句話說,該方法將 中第一個字節值的最高位作爲符號位解釋爲 確保將十六進制字符串正確解釋爲 正數,第一個數字的值必須爲零 例如,該方法將0x80解釋爲負值,但它的值爲 將0x080或0x0080解釋爲正值。「

+2

要使用BigInteger,不要忘記引用幷包含System.Numerics命名空間(System.Numerics.dll) – haraman

+0

另外,爲了說明一下,BigInteger比「real」整數慢得多,因爲沒有CPU操作直接在這個類型上運行,就像'int'和'long'一樣 – dman2306

+0

不知道爲什麼或者如果這是預期的,但是num1的值是-1370997806539999934671115282(注意負號)。 – Sehnsucht