Java 来自int';s使用最低有效位
我试图解决这个问题,但我不知道从哪里开始:程序接受一个int数组的输入。该方法需要将每个int的最低有效位组合成一个二进制序列,将这些序列转换为它们的char等价项,并返回已完成消息的字符串值Java 来自int';s使用最低有效位,java,Java,我试图解决这个问题,但我不知道从哪里开始:程序接受一个int数组的输入。该方法需要将每个int的最低有效位组合成一个二进制序列,将这些序列转换为它们的char等价项,并返回已完成消息的字符串值 public String StringsFromLeastSigBitsOfIntsSTEGO(int[] binar) { } 以下是我试图获得的结果: stringsfromleastsigbitsofintstego([0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,
public String StringsFromLeastSigBitsOfIntsSTEGO(int[] binar) {
}
以下是我试图获得的结果:
stringsfromleastsigbitsofintstego([0,1,0,0,1,0,0,0,0,1,1,0,0,0,0,0,1,1,0,0,0])→ “帽子”
stringsfromleastsigbitsofintstego([254,255,254,255,254,254,254,255,255,254,254,254,254,254,254,254,255,254,255,255,255,254,255,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,255,254,254,254,254,255,254→ “帽子”
stringsfromleastsigbitsofintstego([188,235,255,240,154,54,0,67,12,204,101,6,0252,66,92,6,77,233,254,8,88,17,124,4,11,15,20,24,31,34,41,44,51,55,61,64,71,74,80])→ “打赌”
这里有一个提示
ASCII中十六进制的字母d
为64或二进制的1100100
因此,将从左到右的位组合起来
int i = 0;
Bits in array
|
V
i = i + 1 i = 1;
i<<1 // shift left one bit - i = 10
i = i + 1 i = 11
i<<1 // shift left one bit - i = 110
i = i + 0 i = 110
i<<1 // shift left one bit - i = 1100
And so on.
首先,您需要从每个数字中获取最低有效位,如上所述,使用&operator,一旦您累积了8位,您可以通过使用基数2解析它们,将它们转换为一个字符。 在这里,我迭代数组并将每个LSB保存在一个字符串中,然后一旦它有8位长,它就会被解析为一个字符
public static String StringsFromLeastSigBitsOfIntsSTEGO(int[] binar)
{
String leastBitSequence = "";
String ans = "";
for (int binary : binar)
{
//Gets the LSB from the number and saves it in a string
leastBitSequence += binary & 1;
//Check if it is 8 bit long and convert it to a char if so then empty the string
if (leastBitSequence.length() == 8)
{
ans += (char) Integer.parseInt(leastBitSequence, 2);
leastBitSequence = "";
}
}
return ans;
}
样本测试
Input: {188, 235, 255, 240, 154, 54, 0, 67, 12, 204, 101, 6, 0, 252, 66, 92, 6, 77, 233, 254, 8, 88, 17, 124, 4, 11, 15, 20, 24, 31, 34, 41, 44, 51, 55, 61, 64, 71, 74, 80};
Output: a bet
把问题分解成更小的步骤。您可以使用&运算符获取最低有效位,例如:int least=some_value&1;您还需要使用按位移位操作对每组8位进行分组。我也会读
Input: {188, 235, 255, 240, 154, 54, 0, 67, 12, 204, 101, 6, 0, 252, 66, 92, 6, 77, 233, 254, 8, 88, 17, 124, 4, 11, 15, 20, 24, 31, 34, 41, 44, 51, 55, 61, 64, 71, 74, 80};
Output: a bet