簡體   English   中英

Obj C等效於Double.doubleToLongBits

[英]Obj C Equivalent to Double.doubleToLongBits

我正在將一些Java代碼移植到Objective C,並且了解足夠多的內容以至於頭疼。 有人可以指出我指向Double.doubleToLongBits和Float.floatToIntBits的objC等效項嗎?

正如jojoba指出的那樣,不能保證long寬度為64位(盡管他錯了說它是32位的-在64位平台上的Objective-C中long為64位)。 也就是說,我將使用實際的固定寬度類型而不是long long

#include <stdint.h>

uint64_t doubleToBits(double x) {
    const union { double f; uint64_t i; } xUnion = { .f = x };
    return xUnion.i;
}

uint32_t floatToBits(float x) {
    const union { float f; uint32_t i; } xUnion = { .f = x };
    return xUnion.i;
}

在Objective C中,沒有安全的方法將double的位分配給long 。在Java中, longdouble都是64位。 在某些情況下,對於目標C, long是32位,而double是64位。

您應該使用long long代替。

int intValue = *((int*)(&floatValue));
long long llValue = *((long long*)(&doubleValue));

暫無
暫無

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

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