在Java中,我可以使用Double.longBitsToDouble()
static
函数,但在Objective-C中我找不到这样做的方法。如何将longbits转换为Objective-C中的double?
我该怎么做?
在Java中,我可以使用Double.longBitsToDouble()
static
函数,但在Objective-C中我找不到这样做的方法。如何将longbits转换为Objective-C中的double?
我该怎么做?
我在Java中并没有真正使用这种方法,但是简单地将long long值设置为double类型的变量有什么问题?
无论平台多长,long long都是64位。
如果需要,您可以在math.h中使用isnan()检查double中的NaN。
您可以使用memcpy
将位表示复制到类型为double
的变量的地址中。我不确定这是否进入未定义行为的领域。
//assert(sizeof(double) == sizeof(unsigned long long));
unsigned long long bitPattern = 0x7ff0000000000000ULL;
double doubleValue;
memcpy(&doubleValue, &bitPattern, sizeof doubleValue);
//assert(isinf(doubleValue));
为正无穷大的位模式被从显示以记录longBitsToDouble
方法this page借来的。
uint64_t bitPattern = whatever;// use this rather than long long because it is explicitly 64 bits
double doubleValue;
doubleValue = *(double*)&bitPattern;