Java - Преобразование шестнадцатеричного в IEEE-754 64-разрядное число с плавающей запятой - двойная точность - PullRequest
2 голосов
/ 20 июня 2011

Я пытаюсь преобразовать следующую шестнадцатеричную строку: "41630D54FFF68872" в 9988776.0 (float-64).

С плавающей точкой одинарной точности-32 я бы сделал:

int intBits = Long.valueOf("hexFloat32", 16).intValue();
float floatValue = Float.intBitsToFloat(intBits);

но это выдает: java.lang.NumberFormatException: Infinite или NaN при использовании 64-битного шестнадцатеричного гексагона выше.

Как преобразовать шестнадцатеричное число в число с плавающей запятой двойной точности, кодированное IEEE-754 с 64 битами?

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 июня 2011

Вам нужна двойная точность, поэтому Float - не тот класс - это для одинарной точности.

Вместо этого вам нужен класс Double, а именно Double.longBitsToDouble .

0 голосов
/ 19 июля 2011

Почти правильно.Просто опустите двойные кавычки в вызове valueOf:

String hexString = "41630D54FFF68872";
long longBits = Long.valueOf(hexString,16).longValue(); 
double doubleValue = Double.longBitsToDouble(longBits);
System.out.println( "double float hexString is = " + doubleValue );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...