Je suis en train de porter du code Java en Objective C et je connais assez bien le bit pour avoir mal à la tête. Quelqu'un peut-il me diriger vers les équivalents objC à Double.doubleToLongBits et Float.floatToIntBits?Obj C équivaut à Double.doubleToLongBits
0
A
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;
}