java - 将一组 ascii 字符转换回字符串

标签 java string type-conversion ascii 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);

输出(在这种情况下)是 97114101 我正在努力寻找一种方法来扭转这种情况,将 ascii 字符的字符串转换回字符串,例如"is"

最佳答案

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

关于java - 将一组 ascii 字符转换回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20582654/

相关文章:

java - JavaOptional 与传统的缺失值处理有何不同?或者如何正确使用JavaOptional

java - 帮助 Java 日历——它给出了一些奇怪的输出

java - (Java) 类里面的困难

c - 将字符串的第一个字节递增一个

java - 如何追加/添加存储在数组列表中的文本

java - 在 Java 中转换泛型 Collection 的类型

php - Smith–Waterman 用于 PHP 中的字符串?

将 u_int32_t 转换为 char **

php - 如何从 php 向 Titanium mobile 发送和接收多维数组?

c++ - 简单的继承问题