numero - ¿Cómo convertir una cadena hexadecimal a long en java?
hexadecimal en netbeans (4)
Quiero convertir una cadena hexadecimal a larga en java.
Lo he intentado con la conversión general.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
Pero recibo este mensaje de error:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
¿Hay alguna forma de convertir String a long en java? ¿O estoy intentando lo que no es realmente posible?
¡Gracias!
Use parseLong:
Long.parseLong(s, 16)
Long.decode(str)
acepta una variedad de formatos:
Acepta los números decimales, hexadecimales y octales proporcionados por la siguiente gramática:
DecodableString:
- Registrarse opt DecimalNumeral
- Registrarse opt 0x HexDigits
- Registrarse opt 0X HexDigits
- Registrarse opt # HexDigits
- Registrarse opt 0 OctalDigits
Firmar:
- -
Pero en su caso eso no ayudará, su Cadena está más allá del alcance de lo que puede contener. Necesitas un BigInteger
:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Salida:
23846102773961507302322850521
Para la comparación, aquí está Long.MAX_VALUE
:
9223372036854775807
Long.parseLong(s, 16)
solo funcionará hasta "7fffffffffffffff"
. Use BigInteger
lugar:
public static boolean isHex(String hex) {
try {
new BigInteger(hex, 16);
return true;
} catch (NumberFormatException e) {
return false;
}
}
new BigInteger(string, 16).longValue()
Para cualquier valor de someLong:
new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
En otras palabras, esto devolverá la long
que envió a Long.toHexString()
para cualquier valor long
, incluidos los números negativos. También aceptará cadenas que sean más long
que long
y silenciosamente devolverá los 64 bits más bajos de la cadena como long
. Puede verificar la longitud de la cadena <= 16 (después de recortar el espacio en blanco) si necesita asegurarse de que la entrada se ajusta a una long
.