2012-11-15 60 views
2

我想將字符串(可以說是​​)轉換爲具有相應ascii的int:在本示例中爲979899Java - 將字符串轉換爲相應的ascii的整數?

我碰到兩個問題:

1)我寫的只適用於字符的ASCII是兩個字符長,

2),因爲這些數字得到非常大的,我不能用多頭,我無法利用BigIntegers。

這是我到目前爲止有:

BigInteger mInt = BigInteger.valueOf(0L); 
for (int i = 0; i<mString.length(); i++) { 
     mInt = mInt.add(BigInteger.valueOf(
       (long)(mString.charAt(i)*Math.pow(100,(mString.length()-1-i))))); 
} 

任何建議將是巨大的,謝謝!

+0

不要投給長一次。你嘗試去除長時間的演員嗎? – kosa

+0

valueOf()的參數很長,所以我必須。 – AaronAAA

+2

而不是valueOf(),只需使用Constructor,new BigInteger(String.valueOf(yourCode)); http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html# BigInteger(java.lang.String) – kosa

回答

2

將所有級聯首先與StringBuilder並在結果中創建BigInteger出現什麼問題?這似乎比你目前所做的更簡單。

String str = "abc"; // or anything else 

StringBuilder sb = new StringBuilder(); 
for (char c : str.toCharArray()) 
    sb.append((int)c); 

BigInteger mInt = new BigInteger(sb.toString()); 
System.out.println(mInt); 
1

你不必玩數字遊戲。 (pow 100等)。只是得到數字字符串,並傳遞給構造函數。

final String s = "abc"; 
     String v = ""; 
     final char[] chars = s.toCharArray(); 
     for (int i = 0; i < chars.length; i++) { 
      v += String.valueOf((int) chars[i]); 
     } 
//v = "979899" now 
     BigInteger bigInt = new BigInteger(v); //BigInteger 
     BigDecimal bigDec = new BigDecimal(v); // or BigDecimal 
+0

假設字符串's'將會很長,那麼使用'StringBuilder'可能會更好。重複字符串連接可能很昂貴。 – arshajii

0

要處理n位數字,每次必須乘以不同的冪數。你可以用循環做到這一點:

BigInteger appendDigits(BigInteger total, int n) { 
    for (int i = n; i > 0; i /= 10) 
     total = total.multiply(10); 

    return total.plus(new BigInteger(n)); 
} 

但是,這個問題似乎真的是關於操縱字符串。我可能會做很簡單累加數字詮釋一個字符串,並從結束的字符串創建BI:

StringBuilder result = new StringBuilder(); 
for (char c : mString.getBytes()) 
    result.append(String.valueOf(c)); 
return new BigInteger(result.toString());