我正在尝试将"0x6042607b1ba01d8dl"
转换为long。
我试过了:
long value = new BigInteger("0x6042607b1ba01d8dl", 16).longValue();
long value = new BigInteger("0x6042607b1ba01d8dl", 32).longValue();
long value = Long.decode("0x6042607b1ba01d8dl");
Long.parseLong("0x6042607b1ba01d8dl");
注意:十六进制数“0x6042607b1ba01d8dl”有17个数字
答案 0 :(得分:3)
来自BigInteger(String,int)
构造函数的javadoc:
String表示包含一个可选的减号或加号,后跟指定基数中一个或多个数字的序列。
所以你只需要从字符串中删除0x
:
long value = new BigInteger("6042607b1ba01d8d", 16).longValue();
答案 1 :(得分:2)
BigInteger constructor无法理解您的0x前缀。
使用例如
long value = new BigInteger("6042607b1ba01d8d", 16).longValue();
或者:
String number = "0x6042607b1ba01d8d";
long value = new BigInteger(number.subString(2), 16).longValue();
您也可以使用Long.decode(),它接受0x前缀来解码十六进制。
答案 2 :(得分:0)
你可以试试这个:
long value = Long.parseLong("6042607b1ba01d8d", 16);
Long.parseLong有时会失败,因为BigInteger方法更好。
答案 3 :(得分:0)
正如以上代码形式的答案所说:
String bigHexNumber = "0x6042607b1ba01d8d";
if(bigHexNumber.subString(0, 1).equals("0x") {
bigHexNumber = bigHexNumber.subString(2);
}
long hexInLongForm = new BigInteger(bigHexNumber, 16).longValue();