我想将一个String(简称"abc"
)转换为带有相应ascii的int:在本例中为979899
。
我遇到了两个问题:
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 :(得分:3)
首先使用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 :(得分:1)
你不必玩数字游戏。 (战俘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
答案 2 :(得分:0)
要处理n位数字,您必须每次乘以10的不同幂。你可以用循环来做到这一点:
BigInteger appendDigits(BigInteger total, int n) {
for (int i = n; i > 0; i /= 10)
total = total.multiply(10);
return total.plus(new BigInteger(n));
}
然而,这个问题似乎真的是关于操纵字符串。我可能会做的只是在字符串中累积数字,并在最后从String创建一个BI:
StringBuilder result = new StringBuilder();
for (char c : mString.getBytes())
result.append(String.valueOf(c));
return new BigInteger(result.toString());