C# 大型十六进制字符串上的算术加法和减法

C# 大型十六进制字符串上的算术加法和减法,c#,string,visual-studio-2012,C#,String,Visual Studio 2012,如何在大字符串上执行算术加法和减法。例如,我有以下十六进制字符串 string a1="B91EFEBFBDBDBFEFF39ABEE"; string a2="000FFFFFFFFFFFFFFFFFEEE"; 然后我想做算术加法a1+a2来得到和,而不是字符串连接 然后进行算术减法,例如sum-a2,得到字符串a1 我试着去做 Int64 parseda1 = Int64.Parse(a1); Int64 parseda2 = Int64.Parse(a2); Int64 xyz = ab

如何在大字符串上执行算术加法和减法。例如,我有以下十六进制字符串

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

如果输入字符串格式不正确,则会出现异常。

如果您想要真正的大数字,可以使用表示任意大的有符号整数的结构。试试这个:

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
给了我们一个负数。那可能不是你想要的。要解决此问题,请阅读:

如果值是十六进制字符串,则解析(字符串,NumberStyles) 方法将值解释为使用2的 如果前两个十六进制数字为 大于或等于0x80。换句话说,该方法解释 值中第一个字节的最高阶位,作为符号位。To 确保十六进制字符串正确解释为 正数,值中的第一个数字的值必须为零。 例如,该方法将0x80解释为负值,但 将0x080或0x0080解释为正值。”


我不明白,您的字符串包含“x”和“k”,这是一个怎样的数字?Int64.TryParse()将允许您毫无例外地解析其中一个字符串表示整数(整数)。这就是为什么您得到的输入字符串格式不正确的异常。将这两个字符串相加或相减的预期结果是什么?@snow_FFFFFF-但是
Int64。TryParse
仍然不会将其中任何一个字符串解析为整数。您仍然有一个IPX。这应该是一个十六进制字符串吗?要使用BigInteger,请不要忘记引用并包含System.Numerics命名空间(System.Numerics.dll)),也要注意,
BigInteger
比“real”慢得多整数,因为没有像
int
long
那样直接在这种类型上操作的CPU操作,不确定为什么或者是否需要这样做,但这样num1值是-137099780653999934671115282(注意负号)。@Sehnsucht现在检查我的答案:)