2009-09-23 21 views
6

En Java, ¿cómo puede una representación de cadena hexadecimal de un byte (por ejemplo, "1e") convertirse en un valor de byte?Convierta una cadena hexadecimal en un byte en Java

Por ejemplo:

byte b = ConvertHexStringToByte("1e"); 
+0

así ¿cuál es tu pregunta? ¿Si alguna? – EJP

+0

Esta fue una buena pregunta. ¿Por qué estaba cerrado? – Joe

Respuesta

15
Integer.parseInt(str, 16); 
+0

Lo intenté pero eso crea un int, no un byte, entonces para "1e" obtendría 30, no 0x1e, incluso si lanzo a un byte. – phpscriptcoder

+1

¿Cómo distinguirías un byte de valor 30 y 0x1e, que se almacenan de forma idéntica cuando se usa byte de tipo? –

+2

@phpscriptcoder: No, obtendrías 1e. Intente esto: String roundtrip = Integer.toHexString (Integer.parseInt (str, 16)); – erickson

12

Byte.parseByte devolverá un byte analizando una representación de cadena.

Utilizando el método con la firma (String, int), la raíz puede especificarse como 16, por lo que uno puede analizar una representación hexadecimal de un byte:

Byte.parseByte("1e", 16); 
+7

¡Peligro! Este método no analizará los valores de bytes negativos, por ejemplo, "AD". Ver http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307. Es mejor usar Integer.parseInt –

+1

@Dave L. Eso no es correcto porque según el evaluador: el método en cuestión se comporta exactamente como se especificó. Con este método, se debe indicar un valor negativo usando un signo menos "-" y no establecer el bit de signo haciendo que el bit de orden superior sea uno. En otras palabras, para la base 16, las cadenas válidas van desde "-80" (-128) a "7f" (127); La base "AD" 16 es positiva 173 y está fuera de rango. – Caner

+1

@LAS_VEGAS De hecho, Byte.parseByte funciona como se especifica, sin embargo, si alguien quiere convertir una representación hexadecimal de 2 caracteres de un valor de 8 bits en el byte correspondiente, como lo sugiere el interrogador, este método (como se especifica e implementa) no hacer eso para valores donde el bit de orden superior es 1. –

19

Usted puede utilizar Byte.parseByte("a", 16); pero esto sólo funcionará para los valores hasta 127, valores más altos entonces que necesitarán para echar a byte, debido a problemas firmados/no firmados por lo que recomiendo para transferirla a un int y luego echarlo a byte

(byte) (Integer.parseInt("ef",16) & 0xff); 
+1

: ¿Por qué '& 0xff'? –

+1

y 0xff se usa para obtener el valor sin signo de int. – JCasso

+1

¡Esta debería ser la respuesta aceptada! ¡Hace exactamente lo que necesitaba! – VikingPingvin

Cuestiones relacionadas