在Java中,如何邻接最低有效位以形成字符?

在Java中,如何邻接最低有效位以形成字符?,java,binary,byte,shift,steganography,Java,Binary,Byte,Shift,Steganography,我有一个颜色数组(如果你想知道的话,可以从bmp文件中读取),我取每个RGB值的最低有效位并创建一个像素数组 然后我获取该数组,从每组8个元素中创建一个字符,然后将其添加到名为message的字符串中 在这里的某个地方,我的代码出现了故障,我没有得到预期的输出。由于我基本上打印出了所有像素,很遗憾我无法提供输出 如果你需要澄清,请告诉我 // extracts a message hidden in a BMP file public String extractMessage() {

我有一个颜色数组(如果你想知道的话,可以从bmp文件中读取),我取每个RGB值的最低有效位并创建一个像素数组

然后我获取该数组,从每组8个元素中创建一个字符,然后将其添加到名为message的字符串中

在这里的某个地方,我的代码出现了故障,我没有得到预期的输出。由于我基本上打印出了所有像素,很遗憾我无法提供输出

如果你需要澄清,请告诉我

// extracts a message hidden in a BMP file
public String extractMessage()
{
    int iter = 0;
    // read the lsbs of the rgb values into one array
    char[] pixels = new char[bmpHeight * bmpWidth * 3];
    for(Color[] cRow: image)
        for(Color c: cRow)
        {
            pixels[iter++] = c.getRed() & 1;   // make zero or one
            pixels[iter++] = c.getGreen() & 1;
            pixels[iter++] = c.getBlue() & 1;
        }

    // iterate through the pixels and move the lsbs into the correct place value
    String message = "";
    int i = 0;
    while(i < pixels.length - pixels.length % 8)
    {
        char c = (char)0;
        c += pixels[i++] << 7; // 1
        c += pixels[i++] << 6; // 2
        c += pixels[i++] << 5; // 3
        c += pixels[i++] << 4; // 4
        c += pixels[i++] << 3; // 5
        c += pixels[i++] << 2; // 6
        c += pixels[i++] << 1; // 7
        c += pixels[i++]; // 8
        message += c;
    }
    return message;
}
//提取隐藏在BMP文件中的消息
公共字符串提取消息()
{
int-iter=0;
//将rgb值的LSB读取到一个数组中
字符[]像素=新字符[bmpHeight*bmpWidth*3];
用于(颜色[]cRow:图像)
用于(颜色c:乌鸦)
{
像素[iter++]=c.getRed()&1;//设为零或一
像素[iter++]=c.getGreen()&1;
像素[iter++]=c.getBlue()&1;
}
//迭代像素并将LSB移动到正确的位置值
字符串消息=”;
int i=0;
而(ic++=pixels[i++]为我们提供您的图像和至少部分预期输出。将您的方法分解为每个组件函数,然后为每个函数编写一个测试用例。对我来说很好:为什么不只
c=(pixels[i++]@user1796994您提供的代码正在工作。可能在其他地方出错。一个完全工作的示例(包括读写图像):