簡體   English   中英

如何將BigInteger字符串轉換為ASCII字符串?

[英]How can I convert a BigInteger String to an ASCII 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();
}

我的目標是從

“這是我的信息”

轉換為"8410410511532105115321091213210910111511597103101"

然后將其轉換回"This is my message"

我嘗試了以下操作,但從bigStringToString的輸出中返回了"????is?[ÕÒ?o??ge"

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

我的轉換有什么問題?

正如其他人所指出的,您並沒有考慮整數的不同長度。 由於您假定所有字符均為ascii且長度為3,因此可以在為BigInteger構造字符串時使用以下字符:

 sb.append(String.format("%03d", (int) c));

您當前的轉換是不可逆的,相反,您可以直接使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM