• # boutisme

    Posté par . En réponse au message convertion valeur hexadecimal en decimal. Évalué à 5.

    Ton fichier est petit boutiste mais ton système ne l'est pas (sparc ? 68000 ?). Donc :

    char b[4];
    fread(b, 1, 4, infile);
    int i = b[3]<<24 | b[2]<<16 | b[1] << 8 | b[0];

    Ce que tu as fais correspond à ça :

    union {
    char b[4];
    int i;
    } u;
    fread(u.b, 1, 4, infile);
    int i = u.i;

    Lire les octets dans l'ordre puis croire que c'est le même ordre en mémoire pour un int. Cela ne fonctionne pas sur un système gros boutiste (ni sur un biboutiste (arm, ppc, ia64)).

    Tu peux tester avec #ifdef __LITTLE_ENDIAN.
    Sinon, il vaut mieux utiliser les fonctions htonl et consorts qui convertissent proprement un long (32 bits) vers et depuis le format « réseau ». Voir 'man byteorder'.