int codage_donnees(char *mem, int taille) { int pos; // données à envoyer int min1, min2, max1, max2; double moy1, moy2; min1 = 5; max1 = 12; moy1 = 8.2; min2 = 9; max2 = 13; moy2 = 9.3; // création du flot en encodage XDR flot_xdr; xdrmem_create(&flot_xdr, mem, taille, XDR_ENCODE); // codage des données if (!xdr_int(&flot_xdr, &min1) return -1; if (!xdr_int(&flot_xdr, &max1)) return -1; if (!xdr_double(&flot_xdr, &moy1)) return -1; if (!xdr_int(&flot_xdr, &min2)) return -1; if (!xdr_int(&flot_xdr, &max2)) return -1; if (!xdr_double(&flot_xdr, &moy2)) return -1; pos = xdr_getpos(&flot_xdr); xdr_destroy(&flot_xdr); return pos; } // codage_donnees bool_t decodage_donnees(char *mem, int taille) { // données à décoder du flot int min1, min2, max1, max2; double moy1, moy2; // création du flot en encodage XDR flot_xdr; xdrmem_create(&flot_xdr, mem, taille, XDR_DECODE); // décodage des données if (!xdr_int(&flot_xdr, &min1) return FALSE; if (!xdr_int(&flot_xdr, &max1)) return FALSE; if (!xdr_double(&flot_xdr, &moy1)) return FALSE; if (!xdr_int(&flot_xdr, &min2)) return FALSE; if (!xdr_int(&flot_xdr, &max2)) return FALSE; if (!xdr_double(&flot_xdr, &moy2)) return FALSE; xdr_destroy(&flot_xdr); // affichage des données printf("serie 1 : min = %d, max = %d, moy = %f\n" min1, max1, moy1); printf("serie 2 : min = %d, max = %d, moy = %f\n", min2, max2, moy2); return TRUE; 27 } // decodage_donnees int nb; bool_t res; char buffer[TAILLEBUF]; // contiendra le flot nb = codage_donnees(buffer, TAILLEBUF); if (nb == -1) exit(1); printf(''*** codage réussi : nb = %d\n'', nb); res = decodage_donnees(buffer, TAILLEBUF); if (!res) exit(1); printf(''*** fin du décodage\n'');