如何在java中将BigInteger转换为String

时间:2010-06-12 10:43:43

标签: java string cryptography biginteger

我将String转换为BigInteger,如下所示:

Scanner sc=new Scanner(System.in);
System.out.println("enter the message");
String msg=sc.next();
byte[] bytemsg=msg.getBytes();
BigInteger m=new BigInteger(bytemsg); 

现在我想要我的字符串了。我正在使用m.toString(),但这给了我想要的结果。

为什么呢?错误在哪里,我该怎么办?

8 个答案:

答案 0 :(得分:25)

您想使用BigInteger.toByteArray()

String msg = "Hello there!";
BigInteger bi = new BigInteger(msg.getBytes());
System.out.println(new String(bi.toByteArray())); // prints "Hello there!"

我理解的方式是你正在进行以下转换:

  String  -----------------> byte[] ------------------> BigInteger
          String.getBytes()         BigInteger(byte[])

你想要反过来:

  BigInteger ------------------------> byte[] ------------------> String
             BigInteger.toByteArray()          String(byte[])

请注意,您可能希望使用指定显式编码的String.getBytes()String(byte[])重载,否则可能会遇到编码问题。

答案 1 :(得分:8)

为什么不使用BigInteger(String)构造函数?这样,通过toString()进行往返应该可以正常工作。

(另请注意,您转换为字节并未明确指定字符编码并且与平台有关 - 这可能会让您感到悲伤)

答案 2 :(得分:7)

使用m.toString()String.valueOf(m)。 String.valueOf使用toString()但是为null安全。

答案 3 :(得分:7)

您还可以使用Java的隐式转换:

BigInteger m = new BigInteger(bytemsg); 
String mStr = "" + m;  // mStr now contains string representation of m.

答案 4 :(得分:2)

使用字符串构造BigInteger时,字符串必须格式化为十进制数字。您不能使用字母,除非您在第二个参数中指定基数,您可以在基数中指定最多36个。 36将仅为您提供字母数字字符[0-9,a-z],因此如果使用此字符,您将没有格式化。你可以创建:new BigInteger(“ihavenospaces”,36) 然后转换回来,使用.toString(36)

但要保持格式化: 使用几个人提到的byte []方法。这将把格式化的数据打包成最小的大小,并允许您轻松跟踪字节数

这对于RSA公钥加密系统示例程序应该是完美的,假设您保持消息中的字节数小于PQ的字节数

(我意识到这个线程已经老了)

答案 5 :(得分:1)

要反转

byte[] bytemsg=msg.getBytes(); 

你可以使用

String text = new String(bytemsg); 

使用BigInteger只会使事情变得复杂,实际上不清楚为什么要使用byte []。与BigInteger或byte []有什么关系?有什么意义?

答案 6 :(得分:0)

http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html

每个对象在Java中都有一个toString()方法。

答案 7 :(得分:0)

//如何解决BigDecimal& BigInteger并返回一个String。

  BigDecimal x = new BigDecimal( a );
  BigDecimal y = new BigDecimal( b ); 
  BigDecimal result = BigDecimal.ZERO;
  BigDecimal result = x.add(y);
  return String.valueOf(result);