2011-12-31 35 views
5

Tengo matriz de cadenas, cada elemento de la matriz es una cadena hexadecimal que consta de 2 caracteres.convertir matriz de cadena a matriz de bytes

Por ejemplo la matriz podría ser:

String a = {"aa","ff","00",.....} 

¿Cómo puedo convertir esta matriz de cadenas en una matriz de bytes de Java?

+2

Creo que la mejor opción es crear una matriz de bytes del mismo tamaño que la matriz de cadenas, usar un ciclo for, y dentro de la llamada al bucle 'myBytes [i] = Byte.parseByte (myStrings [i], 16) 'para analizar cada elemento de cadena en un byte (** Editar: ** ¡Uy, se olvidó de la raíz!). –

+0

http://stackoverflow.com/questions/5425830/convert-the-hexadecimal-string-representation-of-some-bytes-into-a-byte-array-en este enlace, es casi la misma pregunta – dantuch

+0

@HovercraftFullOfEels - Deberías haber publicado eso como una respuesta. – ziesemer

Respuesta

0

Si entiendo correctamente, necesita la representación de bytes de las cadenas concatenadas? Algo así como:

public byte[] getBytes(String[] array) { 
    StringBuilder builder = new StringBuilder(); 
    for(String s: array) { 
     builder.append(s); 
    } 
    return builder.toString().getBytes(); 
} 
+2

Nuevamente, no los bytes analizados. 'getBytes()' no analiza las cadenas individuales en su representación de bytes, sino que usa la codificación de juego de caracteres predeterminada de cada carácter, dos cosas muy diferentes. Querrá eliminar esta respuesta. –

4

Si desea analizar byte sin signo hex-strings, utilice

byte[] b = new byte[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = (byte) Short.parseShort(a[i], 16); 
} 

"ss" se analizará a -1, según two's compliment.

Si desea "FF" para analizar a 255 (más de un byte de Java puede sostener) que tendrá que usar pantalones cortos

short[] b = new short[a.length()]; 

for (int i=0; i<a.length(); i++) { 
    b[i] = Short.parseShort(a[i], 16); 
} 
+0

Sí, esto es de lo que estoy hablando. 1+ –

+0

sí, pero se produce una excepción cuando la cadena es ff Excepción en el hilo "principal" java.lang.NumberFormatException: Para la cadena de entrada: "ff" – user1077980

+0

@ user1077980: El error es suyo, no de Aaron. Tu error es intentar analizar ff. el máximo de bytes es 7f. Intente analizar en int en su lugar.** Editar: ** o utilizar la excelente recomendación de JB Nizet. –

0

Usted debe echar un vistazo a la ByteArrayOutputStream.

Puede iterar a través de cada cadena que tenga y utilizar el método Byte.parseByte(). Puede agregarlo al ByteArrayOutputStream utilizando el método write.

Una vez que haya convertido todas las cadenas, puede usar el método toByteArray() de ByteArrayOutputStream.

+0

ByteArrayOutputStream funcionaría, pero es un poco exagerado aquí. También Byte.parseByte() se ahogará en "ff" –

3

recorrer la matriz, y convertir cada cuerda a un byte usando

byte b = (byte) (Integer.parseInt(theHexaString, 16)); 

Byte.parseByte() analiza sintácticamente bytes firmaron solamente, y no tiene en cuenta el bit de signo como un bit de signo.

Cuestiones relacionadas