我目前遇到的情况是将字符串转换为 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 字符的字符串转换回字符串,例如"is"
最佳答案
您不能对十进制数执行此操作,因为它们表示中的位数会发生变化。因此,您将无法区分序列 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。
关于java - 将一组 ascii 字符转换回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582654/