online ejemplo bytes array java binary byte bytearray binary-data

bytes - byte[] java ejemplo



Cómo convertir cadenas binarias a la matriz de bytes de 2 bytes en Java (4)

Tengo una cadena binaria String A = "1000000110101110" . Quiero convertir esta cadena en matriz de bytes de longitud 2 en java

He tomado la ayuda de este enlace

He intentado convertirlo en byte de varias maneras

  1. He convertido esa cadena en decimal primero y luego aplico el código para almacenar en la matriz de bytes

    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);

Pero los valores almacenados en la matriz de bytes son negativos

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

¿Cuáles son los valores equivocados?

2. También he intentado usar

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

Pero arroja la excepción en la línea de arriba como

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

¿Qué debo hacer ahora para convertir la cadena binaria en una matriz de bytes de 2 bytes? ¿Hay alguna función incorporada en java para obtener la matriz de bytes?


La respuesta que estás recibiendo

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

es correcto.

Esto se llama represantación del cumplido de 2. El primer bit se usa como bit con signo.

0 for +ve 1 for -ve

si el 1er bit es 0 de lo que calcula como regular. pero si el 1er bit es 1 que deduce los valores de 7 bits de 128 y cualquiera que sea la respuesta se presenta en forma de -ve.

En su caso, el primer valor es 10000001 por lo que 1 (1er bit) para -ve y 128-1 (los últimos siete bits) = 127, por lo tanto, el valor es -127.

Para más detalles, lea la representación del complemento de 2.


Los bytes están firmados con enteros de 8 bits. Como tal, su resultado es completamente correcto. Es decir: 01111111 es 127, pero 10000000 es -128. Si desea obtener números en el rango 0-255, debe usar un tipo de variable más grande, como el corto.

Puede imprimir el byte como unsigned como este:

public static String toString(byte b) { return String.valueOf(((short)b) & 0xFF); }


Use putShort para poner un valor de dos bytes. int tiene cuatro bytes.

// big endian is the default order byte[] xByte = ByteBuffer.allocate(2).putShort((short)aInt).array();

Por cierto, tu primer intento es perfecto . No puede cambiar el signo negativo de los bytes ya que se establece el bit más significativo de estos bytes. Eso siempre se interpreta como valor negativo.

10000001₂ == -127

10101110₂ == -82


prueba esto

String s = "1000000110101110"; int i = Integer.parseInt(s, 2); byte[] a = {(byte) ( i >> 8), (byte) i}; System.out.println(Arrays.toString(a)); System.out.print(Integer.toBinaryString(0xFF & a[0]) + " " + Integer.toBinaryString(0xFF & a[1]));

salida

[-127, -82] 10000001 10101110

eso es -127 == 0xb10000001 y -82 == 0xb10101110