在Java中,如何邻接最低有效位以形成字符?
我有一个颜色数组(如果你想知道的话,可以从bmp文件中读取),我取每个RGB值的最低有效位并创建一个像素数组 然后我获取该数组,从每组8个元素中创建一个字符,然后将其添加到名为message的字符串中 在这里的某个地方,我的代码出现了故障,我没有得到预期的输出。由于我基本上打印出了所有像素,很遗憾我无法提供输出 如果你需要澄清,请告诉我在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() {
// 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;
而(i c++=pixels[i++]为我们提供您的图像和至少部分预期输出。将您的方法分解为每个组件函数,然后为每个函数编写一个测试用例。对我来说很好:为什么不只c=(pixels[i++]@user1796994您提供的代码正在工作。可能在其他地方出错。一个完全工作的示例(包括读写图像):