Как преобразовать 18-значную числовую строку в BigInteger? - PullRequest
9 голосов
/ 11 декабря 2010

Может ли кто-нибудь помочь мне в преобразовании 18-значного числа строки в BigInteger в Java

т.е. строка "0x9999999999999999" должна отображаться как 0x9999999999999999 числовое значение.

Ответы [ 4 ]

12 голосов
/ 11 декабря 2010

Вы можете указать базу в конструкторе BigInteger.

BigInteger bi = new BigInteger("9999999999999999", 16);
String s = bi.toString(16);   
2 голосов
/ 11 декабря 2010

Если строка всегда начинается с «0x» и является шестнадцатеричной:

    String str = "0x9999999999999999";
    BigInteger number = new BigInteger(str.substring(2));

лучше, проверьте, начинается ли она с «0x»

  String str = "0x9999999999999999";
  BigInteger number;
  if (str.startsWith("0x")) {
      number = new BigInteger(str.substring(2), 16);
  } else {
      // Error handling: throw NumberFormatException or something similar
      // or try as decimal: number = new BigInteger(str);
  }

Чтобы вывести еекак шестнадцатеричное или преобразовать в шестнадцатеричное представление:

    System.out.printf("0x%x%n", number);
    // or
    String hex = String.format("0x%x", number);
1 голос
/ 11 декабря 2010

Ожидаете ли вы, что число будет в шестнадцатеричном виде, как это обычно означает 0x?

Чтобы превратить обычную строку в BigInteger

BigInteger bi = new BigInteger(string);
String text = bi.toString();

, чтобы превратить шестнадцатеричное число втекст в BigInteger и обратно.

if(string.startsWith("0x")) {
    BigInteger bi = new BigInteger(string.sustring(2),16);
    String text = "0x" + bi.toString(16);
}
0 голосов
/ 11 декабря 2010
BigInteger bigInt = new BigInteger("9999999999999999", 16);    
...