0

これは頭​​が回らない宿題です。手動で行う必要があるため、「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;
}
4

2 に答える 2

1

について正しい考えをお持ちですdecodepow実装はどこにも見当たりませんが、コードが機能しない理由はわかりません。

10 進数から ascii への変換は簡単です。値を char にキャストするだけです。

int v = ...;       // decimal value
char c = (char)v;  // ascii value
于 2013-02-27T03:06:45.843 に答える
0
    int[] bValue = {1,0,0,0,1,0,1};

    int iValue = 0;
    // convert binary to decimal
    for (int i = 0, pow = bValue.length - 1 ; i < bValue.length ; i++, pow--)
        iValue += bValue[i]*Math.pow(2, pow);

    // gets the value as a char
    char cValue = (char)iValue;

    System.out.println("Int value: "+iValue +", Char value : "+cValue);

ASCII テーブル全体が必要な場合は、キーが整数値で、値が対応する ASCII エントリである Map に値を入れることができます。

于 2013-02-27T03:19:48.097 に答える