2012-04-07 43 views
6

Tengo una cadena que contiene una serie de bits (como "01100011") y algunos enteros en un ciclo while. Por ejemplo:Conversión de Java Byte Array Problema

while (true) { 
    int i = 100; 
    String str = Input Series of bits 

    // Convert i and str to byte array 
} 

Ahora quiero una buena forma rápida de convertir cadena e int a la matriz de bytes. Hasta ahora, lo que he hecho es convertir int en String y luego aplicar el método getBytes() en ambas cadenas. Sin embargo, es un poco lento. ¿Hay alguna otra manera de hacer eso que es (puede ser) más rápido que eso?

+0

¿cuál es la relación entre I '' y 'str'? – dash1e

+0

@ dash1e, sin relación. Solo muestro un ejemplo. i y str son diferentes. str no es una representación de bits. – Arpssss

+1

Entonces, ¿necesita dos funciones separadas y rápidas para convertir objetos internos o cadenas de bits en una matriz de bytes? – dash1e

Respuesta

7

¡Puede usar la clase Java ByteBuffer!

Ejemplo

byte[] bytes = ByteBuffer.allocate(4).putInt(1000).array(); 
+0

¿Está disponible en paquetes incorporados de Java? – Arpssss

+0

Muchas gracias. Lo encontré. – Arpssss

+0

@Arpssss np. buddy – Kevin

2

la conversión de un int es fácil (little endian):

byte[] a = new byte[4]; 
a[0] = (byte)i; 
a[1] = (byte)(i >> 8); 
a[2] = (byte)(i >> 16); 
a[3] = (byte)(i >> 24); 

la conversión de la cadena, primero convertir a un entero con Integer.parseInt(s, 2), a continuación, hacer lo anterior. Use Long si su cadena de bits puede ser de hasta 64 bits, y BigInteger si será incluso mayor que eso.

1

Para int

public static final byte[] intToByteArray(int i) { 
    return new byte[] { 
      (byte)(i >>> 24), 
      (byte)(i >>> 16), 
      (byte)(i >>> 8), 
      (byte)i}; 
} 

Para cadena

byte[] buf = intToByteArray(Integer.parseInt(str, 2)) 
+0

Para el método de cadena no funciona. – Rushil

+0

¿Cuánto dura tu cadena? – dash1e

+1

La cadena puede contener como máximo 32 bits (sin ceros a la izquierda). Y necesita ponerlo en una matriz de bytes, entonces está mal – Rushil