2010-11-05 14 views

Répondre

3

Il n'y a aucun moyen sûr d'affecter les bits d'un double à un long en Objective C. En Java, long et double sont tous deux 64bits. Dans certains cas pour l'objectif C, long est de 32 bits et double de 64 bits. Vous devez utiliser long long à la place.

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

Comme Jojoba noté, long n'est pas garanti d'être 64 bits de large (mais il est faux de dire qu'il est 32 bits - long est de 64 bits de large en Objective-C sur les plates-formes 64 bits) . Cela dit, j'utiliserais un type de largeur fixe réel au lieu de 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; 
}