我正在加密一个只包含0和1的字符串数组,如下所示:
public String[] binaryToText1(String[] binary1, int lengthofshares) {
String[] encrptedfinally = new String[lengthofshares];
for(int tt = 0; tt < lengthofshares; tt++) {
String ss2 = "";
String ss = binary1[tt];
String mynextChar;
ss2 = new java.math.BigInteger(ss, 2).toString(16);
encrptedfinally[tt] = ss2;
}
return encrptedfinally;
}
这里lengthofshares只是字符串数组binary1的大小。但是当我试图将它转换回0和1的String数组时,我卡住了 我无法想出解决方案。
解密功能有点像这样:
public String[] textToBinary(String[] alpha, int myK) {
String[] ans = new String[myK + 3];
for(int t = 0; t < myK; t++) {
String s = alpha[t];
byte bytes[] = new byte[s.length()];
char c[] = s.toCharArray();
int i;
for(i = 0; i < s.length(); i++) {
bytes[i] = (byte) c[i];
}
StringBuilder binary = new StringBuilder();
for(byte b : bytes) {
int val = b;
for(i = 0; i < 8; i++) {
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
}
ans[t] = binary.toString();
}
return ans;
}
但结果有所不同。请帮助。我们无法理解它的错误
答案 0 :(得分:0)
不幸的是,我不太了解您的代码,而且我也无法弄清楚您是否只想进行简单的字符串到字节转换,或者您是否也想进行一些天真的加密。
无论如何,我认为下面的代码完成了你想要的大部分内容。它使用位掩码从0到255整数中提取表示char(char + 127)的整数。
类似地,它使用按位OR将字符串的二进制String []表示形式转换回字符,最后返回字符串。
public static void main(String[] args)
{
String test = "Don't worry, this is just a test";
List<String> binary = stringToBinary(test);
System.out.println(binary);
System.out.println(binaryToString(binary));
}
public static List<String> stringToBinary(String input)
{
LinkedList<String> binary = new LinkedList<String>();
char[] input_char = input.toCharArray();
for (int c = input_char.length - 1 ; c >= 0; c--)
{
int charAsInt = input_char[c] + 127; // Char range is -127 to 128. Convert to 0 to 255
for (int n = 0; n < 8; n++)
{
binary.addFirst((charAsInt & 1) == 1 ? "1" : "0");
charAsInt >>>= 1;
}
}
return binary;
}
public static String binaryToString(List<String> binary)
{
char[] result_char = new char[binary.size() / 8];
for (int by = 0; by < binary.size() / 8; by++)
{
int charAsInt = 0;
for (int bit = 0; bit < 8; bit++)
{
charAsInt <<= 1;
charAsInt |= binary.get(by * 8 + bit).equals("1") ? 1 : 0;
}
result_char[by] = (char) (charAsInt - 127);
}
return new String(result_char);
}