1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
/* fonction de decalage de n bits vers la gauche */
int decaler(
int decalageAGauche_in, //nb de bits a decaler (positif a gauche)
short * tab_in, //tableau d'octets en entree
int nbElement_in, //nb d'elements du tableau en entree
short * tab_out, //tableau d'octets en sortie
int * p_nbElement_out) //nb d'elements du tableau en sortie
{
int result=-1; //resultat de la fonction
long tmpLong=0; //variable de calcul
elementEnCours=0; //indice de parcours
/* TODO!: generaliser pour les cas decalageAGauche_in negatif et superieur à 16 */
if((decalageAGauche_in>0)&&(decalageAGauche_in<16)){
/* calcul du nombre d'elements en sortie */
*p_nbElement_out=nbElement_in+1;
/* allocation memoire du tableau en sortie */
tab_out=malloc((*p_nbElement_out)*sizeof(short));
for(elementEnCours=0;elementEnCours<nbElement_in;elementEnCours++){
/* copie de l'element en entree decale dans la variable de calcul */
tmpLong&=inverse_MSB_LSB(tab_in[elementEnCours])<<decalageAGauche_in;
/* copie du resultat intermediaire */
tab_out[elementEnCours]=inverse_MSB_LSB((short) (tmpLong&0xFF));
/* shift de la variable de calcul */
tmpLong>>=16;
}
/* copie du dernier resultat intermediaire */
tab_out[elementEnCours]=inverse_MSB_LSB((short) (tmpLong&0xFF));
/* calcul termine, affectation du code retour a OK */
result=0;
} |
Partager