Net Core教程

c# BigInteger.Parse和java new BigInteger的一些小问题

本文主要是介绍c# BigInteger.Parse和java new BigInteger的一些小问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

背景:最近在做一个c#转java的项目

在讲我的需求之前,先来介绍一下标题中的两个方法

c#:  
BigInteger.Parse 方法	
定义:将数字的字符串表示形式转换为它的等效 BigInteger 表示形式。
命名空间:
System.Numerics
程序集:
System.Runtime.Numerics.dll

我用到的一个重载的方法:Parse(String, NumberStyles)
定义:将指定样式的数字的字符串表示形式转换为它的等效 BigInteger。
java:
 new BigInteger(str,radix)
 定义:将radix进制的str字符串转换为BigInter型

共同点:

  1. 都是十六进制转10进制

不同点:

  1. c#的那个方法需要注意如果十六进制字符串的前两位的数等于或者大于0x80,那么Parse()方法会把第一位作为符号位,即把它存储为负数。如果需要把此十六进制的字符串解析为正数,需要在字符串前加上“0”
  2. 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`

问题解决!!!!

这篇关于c# BigInteger.Parse和java new BigInteger的一些小问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!