我目前遇到将字符串转换为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 511 251 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的除法。

07-26 00:23