Question

Je suis PORTAGE du code Java pour Objective C et savoir assez pour obtenir un bitwise maux de tête. point que quelqu'un peut me les équivalents objc à Double.doubleToLongBits et Float.floatToIntBits?

Était-ce utile?

La solution

Il n'y a pas de 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 Objective C, long est 32bit et double est 64bit.

Vous devez utiliser long long à la place.

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

Autres conseils

Jojoba noté, long n'est pas garanti 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, je voudrais utiliser un type largeur fixe réelle 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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top