我正在尝试添加两个十六进制数字“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”
答案 0 :(得分:26)
number1
和number2
都是否定的,as per the documentation:
如果value是十六进制字符串,
Parse(String, NumberStyles)
方法如果前两个十六进制数字大于或等于0x80,则使用二进制补码表示将值解释为存储的负数。换句话说,该方法将值中第一个字节的最高位解释为符号位。要确保十六进制字符串被正确解释为正数,值中的第一个数字必须具有零值。
结果为负(如果您打印小数值,您会看到)。它的格式为F2400039,原因与输入被解析为负数相同,尽管我还没有找到支持它的文档。
根据文档,只需在解析时添加前导零:
BigInteger number1 = BigInteger.Parse("0920001A", NumberStyles.HexNumber);
BigInteger number2 = BigInteger.Parse("0920001F", NumberStyles.HexNumber);
然后你会得到正确的结果。