43 java parsing hex long-integer
我想在java中将十六进制字符串转换为long.
我尝试过一般转换.
String s = "4d0d08ada45f9dde1e99cad9";
long l = Long.valueOf(s).longValue();
System.out.println(l);
String ls = Long.toString(l);
Run Code Online (Sandbox Code Playgroud)
但我收到此错误消息:
java.lang.NumberFormatException: For input string: "4d0d08ada45f9dde1e99cad9"
Run Code Online (Sandbox Code Playgroud)
有没有办法在Java中将String转换为long?或者我在尝试哪种不可能!
谢谢!
Sea*_*oyd 82
Long.decode(str) 接受各种格式:
接受以下语法给出的十进制,十六进制和八进制数:
DecodableString:
- 签署opt DecimalNumeral
- 登录选择 0X HexDigits
- 签署选择 0X HexDigits
- 签署opt#HexDigits
- 签署选择 0 OctalDigits
标志:
- -
但是在你无法帮助的情况下,你的String超出了长期可以容纳的范围.你需要一个BigInteger:
String s = "4d0d08ada45f9dde1e99cad9";
BigInteger bi = new BigInteger(s, 16);
System.out.println(bi);
Run Code Online (Sandbox Code Playgroud)
输出:
23846102773961507302322850521
对于比较,这里是Long.MAX_VALUE:
9223372036854775807
Eri*_*rik 41
使用parseLong:
Long.parseLong(s, 16)
Run Code Online (Sandbox Code Playgroud)
小智 11
new BigInteger(string, 16).longValue()
Run Code Online (Sandbox Code Playgroud)
对于someLong的任何值:
new BigInteger(Long.toHexString(someLong), 16).longValue() == someLong
Run Code Online (Sandbox Code Playgroud)
换句话说,这将返回long您发送Long.toHexString()的任何long值,包括负数.它还将接受大于a的字符串long并以静默方式返回字符串的低64位作为a long.你可以检查字符串长度<= 16(在修剪空格之后),如果你需要确保输入符合a long.
小智 6
Long.parseLong(s, 16)只会工作到"7fffffffffffffff". 使用BigInteger来代替:
public static boolean isHex(String hex) {
try {
new BigInteger(hex, 16);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79651 次 |
| 最近记录: |