Ilj*_*lja 5 java string ascii type-conversion long-integer
我目前有一种情况,我将字符串转换为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);
Run Code Online (Sandbox Code Playgroud)
输出(在这种情况下)是97114101我正在努力找到一种方法如何扭转这一点,将ascii字符串转换回字符串,例如"是"
您不能使用十进制数来执行此操作,因为它们的表示形式中的位数会发生变化。因此,您将无法区分序列112 5和。11 251 125
但是,您可以强制每个字符恰好占据三位数字。在这种情况下,您可以通过重复除以 1000 并取余数来恢复该数字:
for (char c : str.toCharArray()) {
String numStr = String.valueOf((int)c);
while (numStr.length() != 3) numStr = "0"+numStr;
sb.append(numStr);
}
Run Code Online (Sandbox Code Playgroud)
如果您仅使用 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);
Run Code Online (Sandbox Code Playgroud)
现在您可以使用除以 256 而不是 1000。