Java 来自int';s使用最低有效位

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,

我试图解决这个问题,但我不知道从哪里开始:程序接受一个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,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