java - 如何将 BigInteger 字符串转换为 ASCII 字符串?

标签 java string

我有两个反函数:

public static BigInteger stringToBig(String message) {      
    StringBuilder sb = new StringBuilder();
    for (char c : message.toCharArray()) {
        sb.append((int)c);
    }

    return new BigInteger(sb.toString());
}

public static String bigStringToString(String string) {
    StringBuilder result = new StringBuilder();
    for (int x = (string.length() % 3 - 3) % 3; x < string.length(); x += 3) {
        int chr = Integer.parseInt(string.substring(Math.max(x, 0), x + 3));
        result.append(Character.toString((char) (chr)));
    }
    return result.toString();
}

我的目标是从

中获取字符串

"This is my message"

将其转换为“8410410511532105115321091213210910111511597103101”

然后将其转换回“这是我的消息”

我尝试了以下方法,但得到了 "???is?[ÕÒ?o??ge" 作为 bigStringToString 的输出

String text = String.valueOf(stringToBig("This is my message"));
System.out.println(text);
System.out.println(bigStringToString(text));

我的转换有什么问题吗?

最佳答案

您当前的转换是不可逆的,您可以直接使用 String.getBytes() 中的 byte[]。并且不要忘记指定编码。比如,

String s = "This is my message";
try {
    byte[] enc = s.getBytes("UTF-8");
    BigInteger val = new BigInteger(enc);
    System.out.println(val);
    System.out.println(new String(val.toByteArray(), "UTF-8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

输出

7352961551138726160548009928799764296591205
This is my message

关于java - 如何将 BigInteger 字符串转换为 ASCII 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497085/

相关文章:

sscanf() 中的字符指针

java - 为什么 String.equals() 不在后台使用 hashCode() 相等性检查?

python - 在 python 中使用 str.format() 女巫类

Java StringUtils.stripEnd 带有句点、连字符或下划线

java - JPA (Hibernate) 不会增加版本列

java - 这是通过 HTTP POST 向 java Web 服务器提交 JSON 的正确方法吗?

用于在一组字符串中查找最长的公共(public)起始子字符串的 R 实现

java - Hibernate ManyToMany 方法抛出 'org.hibernate.LazyInitializationException' 异常

java - 同步 2 个线程或 1000 个线程哪个更难?

python - 用 Python 解析莎士比亚文本