我想添加两个十六进制数字"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
这两个number1和number2为负,按照文档:
如果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)
然后,您将获得正确的结果.
| 归档时间: |
|
| 查看次数: |
1565 次 |
| 最近记录: |