我目前遇到将字符串转换为ASCII字符的情况:
String str = "are"; // 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);
我的输出(在这种情况下)是
97114101
,我正在努力寻找一种方法来扭转这种情况,将ascii字符串转换回字符串,例如“是” 最佳答案
您不能使用十进制数字,因为十进制数字的表示形式会发生变化。因此,您将无法区分112 5
和11 25
和1 125
序列。
但是,您可以强制每个字符恰好占据三位数。在这种情况下,您可以通过重复除以1000并取余数来恢复数字:
for (char c : str.toCharArray()) {
String numStr = String.valueOf((int)c);
while (numStr.length() != 3) numStr = "0"+numStr;
sb.append(numStr);
}
如果仅使用UNICODE代码点的ASCII部分,这将有些浪费,因为所需的值大部分是两位数。如果您切换为十六进制,则所有ASCII码点都可以用两位数字表示:
for (char c : str.toCharArray()) {
String numStr = Integer.toString(c, 16);
if (numStr.length() == 1) numStr = "0"+numStr;
sb.append(numStr);
}
BigInteger mInt = new BigInteger(sb.toString(), 16);
现在您可以使用256而不是1000的除法。