6

バイナリ string がありますString A = "1000000110101110"。この文字列を長さ2のバイト配列に変換したいjava

私はこのリンクの助けを借りました

いろいろな方法でバイトに変換しようとしました

  1. 最初にその文字列を10進数に変換してから、コードを適用してバイト配列に格納します

    int aInt = Integer.parseInt(A, 2);
            byte[] xByte = new byte[2];
        xByte[0] = (byte) ((aInt >> 8) & 0XFF);
        xByte[1] = (byte) (aInt & 0XFF);
        System.arraycopy(xByte, 0, record, 0,
                xByte.length);
    

しかし、バイト配列に格納される値は負です

xByte[0] :-127
xByte[1] :-82

これは間違った値です。

2.私も使ってみました

byte[] xByte = ByteBuffer.allocate(2).order(ByteOrder.BIG_ENDIAN).putInt(aInt).array();

しかし、上記の行で例外をスローします

  java.nio.Buffer.nextPutIndex(Buffer.java:519)     at
  java.nio.HeapByteBuffer.putInt(HeapByteBuffer.java:366)   at
  org.com.app.convert.generateTemplate(convert.java:266)

javaバイナリ文字列を 2 バイトのバイト配列に変換するにはどうすればよいですか?バイト配列を取得する組み込み関数はありますか?

4

4 に答える 4

2

バイトは符号付き 8 ビット整数です。そのため、結果は完全に正しいです。つまり、01111111 は 127 ですが、10000000 は -128 です。0 ~ 255 の範囲の数値を取得する場合は、short などのより大きな変数タイプを使用する必要があります。

次のようにバイトを符号なしで出力できます。

public static String toString(byte b) {
    return String.valueOf(((short)b) & 0xFF);
}
于 2013-09-24T08:01:34.590 に答える