我想将一个字符串,比如说"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)))));
}
任何建议都会很棒,谢谢!
先用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);
你不必玩数字游戏。(战俘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
要处理 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));
}
但是,这个问题似乎真的与操作字符串有关。我可能会做的是简单地累积字符串中的数字,然后从末尾的字符串创建一个 BI:
StringBuilder result = new StringBuilder();
for (char c : mString.getBytes())
result.append(String.valueOf(c));
return new BigInteger(result.toString());