gpt4 book ai didi

java - 将 char 连接成一个字符串

转载 作者:行者123 更新时间:2023-11-30 07:17:34 27 4
gpt4 key购买 nike

我有这个方法,它接受一个 BigInteger,生成另一个 BigInteger(通过 rsa 算法),然后将其转换为二进制,然后将其分解为 8 个 block ,在那里我获得该二进制字符串的 ascii 值。

一切正常

但是我无法获取我从每个二进制字符串中获取的 ascii 字符并从中创建一个新字符串。我正在尝试使用内置的 concat 方法,但它似乎不起作用!

    public static String Decrypt( BigInteger ct, BigInteger d, BigInteger mod ){

String pt = null;
BigInteger message = ct.modPow(d, mod); //the decrypted message M but still in BigInteger form
String plaintext = message.toString(2);

if( plaintext.length() % 8 != 0 ){
plaintext = "00000000".substring( plaintext.length() % 8 ) + plaintext;
}

String c;
int charCode = 0;
for( int i = (plaintext.length()/8) - 1 ; i >= 0; i--){

charCode = Integer.parseInt((plaintext.substring(i*8, (i*8)+8)) , 2) ;
c = new Character( (char) charCode).toString();
System.out.print(c); // here is where i need something like pt.concat(c) or something like that, I dont really want it printed
} // i just want all of these chars to be put into the string pt
System.out.println();
return pt;
}

正如您在评论中看到的那样,这就是我所说的,我的意思是通过查看 concat 的 API 似乎我正在做的是正确的,但它就是行不通!

如果您能解释/说明问题所在,谢谢!

最佳答案

1 。您应该使用 StringBuilder 将字符附加到。

2。您的代码创建了很多字符串:plaintext.substring(i*8, (i*8)+8))

下面是解决这两个问题的代码。

public static void main(String... args) {

String plaintext = "";

{ // preparing for test
String input = "abc";
for (char ch : input.toCharArray()) {
String charAs8bits = String.format("%8s",
String.valueOf(Integer.toBinaryString(ch))).replace(
' ', '0');
plaintext = charAs8bits + plaintext;
}
System.out.println("plaintext = " + plaintext);
}

StringBuilder output = new StringBuilder();
for (int i = plaintext.length() - 8; i >= 0; i -= 8) {

boolean isDigit = Character.isDigit(plaintext.charAt(i)) //
&& Character.isDigit(plaintext.charAt(i + 1)) //
&& Character.isDigit(plaintext.charAt(i + 2)) //
&& Character.isDigit(plaintext.charAt(i + 3)) //
&& Character.isDigit(plaintext.charAt(i + 4)) //
&& Character.isDigit(plaintext.charAt(i + 5)) //
&& Character.isDigit(plaintext.charAt(i + 6)) //
&& Character.isDigit(plaintext.charAt(i + 7)) //
;

if (isDigit) {
int num = (Character.digit(plaintext.charAt(i), 2) << 7) //
+ (Character.digit(plaintext.charAt(i + 1), 2) << 6) //
+ (Character.digit(plaintext.charAt(i + 2), 2) << 5) //
+ (Character.digit(plaintext.charAt(i + 3), 2) << 4) //
+ (Character.digit(plaintext.charAt(i + 4), 2) << 3) //
+ (Character.digit(plaintext.charAt(i + 5), 2) << 2) //
+ (Character.digit(plaintext.charAt(i + 6), 2) << 1) //
+ (Character.digit(plaintext.charAt(i + 7), 2)) //
;
output.append((char) num);
}
}
System.out.print("output = " + output);
}

输出

plaintext = 011000110110001001100001
output = abc

UPD

我还将 for 循环更改为对我来说看起来更自然的 View - 因此 i 指向“基本”索引。

关于java - 将 char 连接成一个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com