我正在编写一个Image加密程序,我在其中编码图像中的字符串。
我正在处理.png
张图片。
编码按以下步骤执行:
4byte
像素的每个字节的LSB根据字符的二进制形式的每个位而改变。第一个字节的LSB位于第0位,第二个字节的LSB位于第8个位置,第三个字节位于第16个位置,第四个字节位于第24个位置。用于解码:
在每第8位之后,包含解码位的int被转换为字符。然后用另一个字符的零初始化。
if((pixels[i][j] & change)==1)
{
tempText|=1 ;
}
tempText<<=1;
根据迭代,更改为1,256,65536,16777216。第0,第8,第16和第24位是其中之一。
代码编译得很好。但解码后,我在输出中得到奇怪的ascii字符。我找不到原因。所以我在这里咨询专家。
答案 0 :(得分:0)
(这对评论来说太长了)
您写道:
int change = 0;
for(int k=0;k<4;k++)
{
if(k==0)
{
change=1;
}
else
if(k==1)
{
change=256;
}
else
if(k==2)
{
change=65536;
}
else
if(k==3)
{
change = 16777216;
}
那里有很多重复。通常,计算机非常擅长消除重复。
如果我没有被这一个班轮误解,这可以改写:
final int change = 1 << 8 * k;