将ascii字符集转换回字符串

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字符串转换回字符串,例如"是"

das*_*ght 3

您不能使用十进制数来执行此操作,因为它们的表示形式中的位数会发生变化。因此,您将无法区分序列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。