【发布时间】:2014-08-15 12:37:08
【问题描述】:
我正在寻找几个小时来解决这个问题,但我不明白它是如何工作的。我有一个来自 delphi 双值的十六进制字符串:0X3FF0000000000000。该值应为 1.0。它有 8 个字节长,第一位是符号,接下来的 11 位是指数,其余的是尾数。所以对我来说,这个十六进制值等于 0 x 10^(1023)。也许我在某个地方错了,但这没关系。关键是,我需要将这个十六进制值转换为目标 c 双精度值。如果我这样做:(double)strtoll(hexString.UTF8String, NULL,16); 我得到:4.607...x 10 ^18。我究竟做错了什么?
【问题讨论】:
-
严格来说,这不是 delphi double,而是标准的 IEEE-754 double。指数以 1023 的偏移量编码,使您的值
10^(0) = 1.0。你是怎么得到一个十六进制字符串的?对于目的而言,这似乎不是一种明智的格式... -
在 IEEE 64 位二进制中为 1.0。详情请参阅 (en.wikipedia.org/wiki/Double_precision_floating-point_format)。
标签: objective-c delphi double