【发布时间】:2010-04-09 17:09:11
【问题描述】:
我正在尝试对二进制字符串进行简单的剖腹产,并且它需要是可逆的。我已经用这种方法做到了..
public static String cShift(String ptxt, int addFactor)
{
String ascii = "";
for (int i = 0; i < ptxt.length(); i+=8)
{
int character = Integer.parseInt(ptxt.substring(i, i+8), 2);
byte sum = (byte) (character + addFactor);
ascii += (char)sum;
}
String returnToBinary = convertToBinary(ascii);
return returnToBinary;
}
这在某些情况下可以正常工作。但是,我认为当它翻转可以用一个字节表示时,它是不可逆转的。在12 的addFactor 测试字符串"test!22*F " 上,字符串变得不可逆。为什么会这样?我该如何阻止它?
编辑:为了澄清起见,测试字符串在传入之前被转换为二进制。这里是 convertToBinary
public static String convertToBinary(String str)
{
char [] array = str.toCharArray();
String binaryToBeReturned = "";
for (int i = 0; i < str.length(); i++)
{
String binary = Integer.toBinaryString((int)array[i]);
binary = padZeroes(binary);
binaryToBeReturned += binary;
}
return binaryToBeReturned;
}
当我以 12 的 cShift 运行此程序,然后以 -12 的 cShift 进行反转时,我得到了这个...
01110100011001010111001101110100001000010011001000110010010001100010101000100000
111111111000000001110001011111111111111110000000001011010011111000111110010100100011011000101100
ÿ?qÿ?->>R6,
ÿótesÿót!22F*
第一个字符串只是将测试字符串转换为二进制。第二个字符串是二进制 cShift 的结果。第三个字符串是这个转换成ascii的结果,第四个字符串是在cShift上用-12反转并转换成ascii的结果。
我很清楚,不知何故,从翻转中添加了额外的位,我不完全确定如何处理它。谢谢。
【问题讨论】:
-
什么是二进制字符串?我想我看不出
"test!22*F "是如何二进制的。 -
看来这个问题与OP的另一个问题有关:stackoverflow.com/questions/2608888/…
-
是的,在这种情况下,问题当前是错误的。你不能使用那个测试字符串。
标签: java type-conversion