添加两个十六进制数

时间:2018-01-15 11:17:21

标签: 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"));

但输出应为“12400039”,但其即将出现“F2400039”

1 个答案:

答案 0 :(得分:26)

number1number2都是否定的,as per the documentation

  

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

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

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

BigInteger number1 = BigInteger.Parse("0920001A", NumberStyles.HexNumber);
BigInteger number2 = BigInteger.Parse("0920001F", NumberStyles.HexNumber);

然后你会得到正确的结果。