添加两个十六进制数

Che*_*n.B 7 c#

我想添加两个十六进制数字"920001A""920001F"

BigInteger number1 = BigInteger.Parse("920001A", NumberStyles.HexNumber);
BigInteger number2 = BigInteger.Parse("920001F", NumberStyles.HexNumber);
BigInteger sum = BigInteger.Add(number1, number2);
MessageBox.Show(sum.ToString("X"));
Run Code Online (Sandbox Code Playgroud)

但是输出应该是"12400039",但其即将出现的"F2400039"

Jon*_*eet 26

这两个number1number2为负,按照文档:

如果value是十六进制字符串,则Parse(String, NumberStyles)如果前两个十六进制数字大于或等于0x80 ,则该方法将值解释为使用二进制补码表示存储的负数.换句话说,该方法将值中第一个字节的最高位解释为符号位.要确保十六进制字符串被正确解释为正数,值中的第一个数字必须具有零值.

结果为负(如果您打印小数值,您将看到).它的格式为F2400039,原因与输入被解析为负数的原因相同,尽管我还没有找到支持它的文档.

根据文档,只需在解析时添加前导零:

BigInteger number1 = BigInteger.Parse("0920001A", NumberStyles.HexNumber);
BigInteger number2 = BigInteger.Parse("0920001F", NumberStyles.HexNumber);
Run Code Online (Sandbox Code Playgroud)

然后,您将获得正确的结果.

  • @ Chetan.B:我已经展示了 - 用一个前导的'0'解析它以便将它们解析为正值,然后你可以毫无问题地添加它们. (2认同)
  • @ Chetan.B:我不确定你的第二条评论意味着什么.如果您不需要`BigInteger`,请不要使用它.我假设因为你*使用`BigInteger`,你期望超出`long`范围的值. (2认同)