[gull] déserialiser une valeur double (ieee 754) avec be64toh
Marc Mongenet
marc at mongenet.ch
Fri Mar 2 22:36:00 CET 2012
Le 2 mars 2012 22:04, Philippe Strauss <philippe at strauss-acoustics.ch> a écrit :
> les macros be64toh et compagnie acceptent un uint64_t en entrée, donc il
> y a le cast automatique floats <-> ints qui entre en action pas pour le
> meilleur dans ce cas.
Tu veux dire msgp->payload.vol.volume est de type double ?
Dans ce cas, l'appel à be64toh serait bien trop tardif
et ça ne peux clairement pas marcher.
> marrant, ocaml n'a pas de type champs de bits natif propre au langage,
> mais C non plus, C ne fait pas mieux dans ce cas.
Oh si, C supporte les champs de bits (bit-field).
Ce n'est guère utilisé, mais tout à fait standard.
#include <stdio.h>
struct s {
unsigned bf0:8;
unsigned bf1:16;
unsigned bf2:4;
unsigned bf3:4;
};
union u {
struct s s;
unsigned char uc[4];
};
int main(void) {
union u u;
u.s.bf0 = 1;
u.s.bf1 = 2;
u.s.bf2 = 4;
u.s.bf3 = 8;
printf("%x %x %x %x\n", u.uc[0], u.uc[1], u.uc[2], u.uc[3]);
return 0;
}
22:34:33 marc at kameha /tmp
gcc -Wall c.c
22:35:24 marc at kameha /tmp
./a.out
1 2 0 84
22:35:25 marc at kameha /tmp
Marc
More information about the gull
mailing list