0

今すぐ下の部分を見てください

ここで 16 進数を 2 進数に変換する方法を見てきましたが、私の質問は次のとおりです。バイト配列内の 16 進数値を 2 進数値に変換し、それを大きな文字列に入れることは可能ですか?

これまでに取り組んできたコードは次のとおりです。

public static void main (String[] args){

    byte [] ex;
    ex = new byte [] {(byte)0xFF, (byte)0x11, (byte)0xEE, (byte)0x22, (byte)0xDD, (byte)0x33, (byte)0xCC, (byte)0x44};
    printByteArray(ex);

}

public static void printByteArray(byte [] array)


{
    System.out.print("[  ");
    for(int i = 0; i < array.length; i++)
    {
        System.out.print(Integer.toHexString((array[i]>>4)&0x0F).toUpperCase());
        System.out.print(Integer.toHexString(array[i]&0x0F).toUpperCase() + "  ");
    }
    System.out.println( "]");
}

私が変更したいのは、バイナリ文字列全体をバイト配列に入れることができるようにすることです。つまり、各 16 進数のバイナリ値を取得し、それをすべて巨大なバイト配列に入れることです。

編集済み

さて、私は最初のもので行きます。それはそれほど重要ではありません。どれくらいの長さだと思いますが、それでも正しかったです。でも今は、その糸を取って使うのを手伝ってくれませんか。私はこのコードを持っています:

public static void main (String[] args){

    String binary;
    byte [] ex;
    ex = new byte [] {(byte)0xFF, (byte)0x11, (byte)0xEE, (byte)0x22, (byte)0xDD, (byte)0x33, (byte)0xCC, (byte)0x44};
    printByteArray(ex);
    binary = hexToBin(ex);
    System.out.println(binary);

}

public static String hexToBin(byte [] array)
{
    String binStr = null;
    for(int i = 0; i < array.length; i++){
        binStr.append(Integer.toBinaryString(array[i]));
    }
    return binStr;
}

...しかし、文字列を(最初に)どのように初期化したかという事実により、出力が含まnullれています。それを修正する方法はありますか?また、追加するように変更したばかりで、理由はわかりませんが、使用できませんか?

4

2 に答える 2

1

Integer.toBinaryString はあなたが望むものを与えるでしょうか?

http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toBinaryString(int)

public static void printByteArray(byte [] array)
{
    System.out.print("[  ");
    for(int i = 0; i < array.length; i++)
    {
        System.out.print(Integer.toBinaryString(array[i]));
    }
    System.out.println( "]");
}
于 2013-02-28T00:06:27.537 に答える
1

byteこれを試してください(上記で示唆しているように、16ビットではなく8ビットであることに注意してください。これは、混乱の一部である可能性があります.16ビットが必要でshort、32ビットが必要ですint

public class PrintBytes {

  public static void printByteArray(byte [] array)

  {
    System.out.print("[ ");
    for (byte anArray : array) {
      byte b = anArray;
      for (int j = 0; j < 8; j++) {
        System.out.print((b & 128) < 1 ? "0" : "1");
        b <<= 1;
      }
      System.out.print(" ");
    }
    System.out.println( "]");
  }

  public static void main(String[] args) {
    printByteArray(new byte[] {64, 32, -1});
  }
}
于 2013-02-28T00:24:40.790 に答える