背景:最近在做一个c#转java的项目
在讲我的需求之前,先来介绍一下标题中的两个方法
c#:
BigInteger.Parse 方法
定义:将数字的字符串表示形式转换为它的等效 BigInteger 表示形式。
命名空间:
System.Numerics
程序集:
System.Runtime.Numerics.dll
我用到的一个重载的方法:Parse(String, NumberStyles)
定义:将指定样式的数字的字符串表示形式转换为它的等效 BigInteger。
java:
new BigInteger(str,radix)
定义:将radix进制的str字符串转换为BigInter型
共同点:
- 都是十六进制转10进制
不同点:
- c#的那个方法需要注意如果十六进制字符串的前两位的数等于或者大于0x80,那么Parse()方法会把第一位作为符号位,即把它存储为负数。如果需要把此十六进制的字符串解析为正数,需要在字符串前加上“0”
- java的那个方法就是暴力的十六进制转整数
例如:
//C#
string str = BigInteger.Parse("FFFFFFFFFFFEA070", NumberStyles.HexNumber).toString
Console.WriteLine(str);//结果为-90000
//java
String b = ""+new BigInteger("FFFFFFFFFFFEA070",16);
System.out.println(b);/结果为18446744073709461616`
然后我的需求是把java的结果改成跟c#的一样。
我想了很久,最后在java的那里添加了如下代码
String b = ""+new BigInteger("FFFFFFFFFFFEA070",16).longValue();
System.out.println(b);/结果为-90000`
问题解决!!!!