これは頭が回らない宿題です。手動で行う必要があるため、「getBytes()」は使用できません。また、最初に 10 進数形式に変換してから、10 進数を ASCII に変換する必要があります (たとえば、10 進数形式で {0,1,1,0,0,0,1,0} = 98、つまり 'b')。 . バイナリ コードを配列に配置し、for ループを使用して配列を位置ごとにトラバースしたいと考えています。ただし、for ループに正しいパラメーターを使用しているかどうかはわかりません。また、コードを「8」のビットに分割する方法もわかりません。もう 1 つ、10 進数値を ASCII に変換する方法を教えてください。取得できる可能性のあるすべての文字をリストし、if-else ループを使用してそれらを参照する必要がありますか? または、10 進数を char に変換できますか? これまでのコードは次のとおりです...(少し面倒です、ごめんなさい)
class Decoder
{
public void findCode(Picture stegoObj)
{
Pixel pixTar = new Pixel(stegoObj,0,0);
Pixel [] pixelArray = stegoObj.getPixels();
int blueVal = 0;
for(int length = 0; length < pixelArray.length; length++)
{
blueVal = pixTar.getBlue();
}
System.out.println(blueVal);
stegoObj.explore();
}
public void decode(int [] binary)
{
int binaryLen = binary.length;
int totVal = 0;
int newVal = 0;
int bitVal = 0;
for(int x = binaryLen - 1; x >= 0; x--)
{
bitVal = binary[x];
int exp = x - (binaryLen - 1);
totVal += (pow(bitVal, exp));
}
System.out.println(totVal);
}
}
public class DecodeImage
{
public static void main(String[] args)
{
Picture stegoObj = new Picture("SecretMessage.bmp");
Decoder deco = new Decoder();
int[] binArray = {0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,0,0,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,1,0,0,1,0,1,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,1,1,0,1,1,0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,1,1,0,0,1,1,0,0,1,0,1,0,0,0,0,1,1,0,1,0,0,0,0,1,0,1,0};
//int[] binArray = {0,1,1,0,0,0,1,0};
//deco.findCode(stegoObj);
deco.decode(binArray);
}
}
編集:
わかりましたので、クラス Decoder の下、デコード ブロック内、for ループ内で、これだけのことがわかりました。
for(int x = binaryLen - 1; x >= 0; x--)
{
bitVal = binary[x];
preVal = bitVal * base;
totVal += preVal;
base = base * 2;
}