簡體   English   中英

無法將uint64_t正確轉換為double。 我想念什么?

[英]Can't convert a uint64_t to a double properly. What am I missing?

為了提供一些背景信息,我正在用C對Java 8的JVM進行編碼,並且試圖打印位於常量池中的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

我想念什么?

@JonathanLeffler明智地指出,解決方案是將表示double的整數轉換為double指針,並打印其內容。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM