Невозможно правильно преобразовать uint64_t в двойное число. Что мне не хватает? - PullRequest
0 голосов
/ 21 мая 2019

Чтобы дать некоторое представление, я кодирую JVM для Java 8 в C и пытаюсь напечатать значение Double, расположенное в пуле констант.

У меня есть две переменные uint32_t, которые представляютвысокое и низкое значение двойника.Я пытаюсь напечатать этот двойник, но не могу понять, что не так с моим кодом.

Я попытался напечатать все значения для проверки.

uint64_t high_arg, low_arg, double_value;

high_arg = cp[cpIndex-1].info.Double.high_bytes; // value is = 0x0000000040000000
low_arg = cp[cpIndex-1].info.Double.low_bytes; // value is = 0x0000000000000000
double_value = (high_arg << 32) | low_arg; // value is = 0x4000000000000000
printf("%f\n", (double)double_value);

Он печатает double:4.61169e+18 но должен был вернуть 2

Чего мне не хватает?

1 Ответ

1 голос
/ 21 мая 2019

Решение, как мудро указывал @JonathanLeffler, заключалось в приведении целого числа, представляющего двойной, как двойной указатель, и они печатали его содержимое.

printf("%f", *(double *)&double_value);
...