--- rpl/src/formateur_fichiers.c 2013/03/21 16:31:58 1.63 +++ rpl/src/formateur_fichiers.c 2013/03/22 12:04:59 1.64 @@ -5257,13 +5257,71 @@ lecture_fichier_non_formate(struct_proce return(NULL); } - (*((integer8 *) (*s_objet).objet)) = 0; + // Récupération des données avec extension de signe. - for(i = 0; i < (signed) deplacement; i++) { - (*((integer8 *) (*s_objet).objet)) |= - ((integer8) octets[i]) - << (8 * ((((signed) deplacement) - 1) - i)); + integer1 i1; + integer2 i2; + integer4 i4; + integer8 i8; + + i1 = 0; + i2 = 0; + i4 = 0; + i8 = 0; + + for(i = 0; i < (signed) deplacement; i++) + { + switch(deplacement) + { + case 1: + i1 |= (integer1) (i1 << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 2: + i2 |= (integer2) (i2 << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 4: + i4 |= (integer4) (i4 << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 8: + i8 |= (integer8) (i8 << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + } + } + + switch(deplacement) + { + case 1: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i1; + break; + + case 2: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i2; + break; + + case 4: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i4; + break; + + case 8: + (*((integer8 *) (*s_objet).objet)) = + (integer8) i8; + break; + } } break;