--- rpl/src/formateur_fichiers.c 2013/03/21 16:31:58 1.63 +++ rpl/src/formateur_fichiers.c 2013/03/22 13:09:13 1.65 @@ -5257,13 +5257,69 @@ 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 = octets[0]; + break; + + case 2: + i2 |= (integer2) (((integer8) octets[i]) << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 4: + i4 |= (integer4) (((integer8) octets[i]) << + (8 * ((((signed) deplacement) - 1) + - i))); + break; + + case 8: + i8 |= (integer8) (((integer8) octets[i]) << + (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;