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");
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");
Integer.parseInt(str, 16);
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
¿Cómo distinguirías un byte de valor 30 y 0x1e, que se almacenan de forma idéntica cuando se usa byte de tipo? –
@phpscriptcoder: No, obtendrías 1e. Intente esto: String roundtrip = Integer.toHexString (Integer.parseInt (str, 16)); – erickson
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);
¡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 –
@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
@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. –
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);
: ¿Por qué '& 0xff'? –
y 0xff se usa para obtener el valor sin signo de int. – JCasso
¡Esta debería ser la respuesta aceptada! ¡Hace exactamente lo que necesitaba! – VikingPingvin
así ¿cuál es tu pregunta? ¿Si alguna? – EJP
Esta fue una buena pregunta. ¿Por qué estaba cerrado? – Joe