Réorganiser les éléments d'un tableau

Bonjour tous

j'ai débuté en C y'a quelques jours, bref j'ai fais une fonction qui range 4 à 4 les élémnents d'un tableau à 16 octets de la façon suivante:
tab1[16]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff};

tab2[4]= {0x33221100, 0x77665544, 0xbbaa9988, 0xffeeddcc};

j'ai fais la fonction suivante grace à votre aide:

void range(unsigned int *tab1, unsigned int *tab2)
{
	int n;
 
    int m=0;
 
	for (n = 0; n < 16 ; n=n+4)
 
	{
 
     tab2[m]= tab1[n+3]*0x1000000+tab1[n+2]*0x10000+tab1[n+1]*0x100+tab1[n]; 
 
     m++;
 
    }
 
}   
 

maintenant je cherche a faire le travail inversement c'est à dire passer du tab2 vers le tab1, j'ai esayé ce morceau de code pour une seule valeur du tab2:

unsigned int dr = tab2[0] / 0x1000000;
 unsigned int ds = ((tab2[0] % 0x1000000) / 0x10000) ;
 unsigned int dv = (((tab2[0] % 0x1000000) % 0x10000) / 0x100) ;
 unsigned int dx = (((tab2[0] % 0x1000000) % 0x10000) % 0x100) ;


ça marche mais c'est long et compliqué et puis j'arrive pas à l'intégrer dans une boucle,
avez vous une idée de fonction pour reconstruire tab1 à partir de tab2 ??
merci d'avance

1 réponse

  • Votes
  • Date
  • Date décroissante
  1. Salut,
    tu peux essayer cela:
    #define uchar unsigned char  
    #define ulong unsigned long  
    int main()  
    {  
        uchar v=0,n,j;  
    
        uchar tab1[16];  
        ulong tab2[4]= {0x33221100, 0x77665544, 0xbbaa9988, 0xffeeddcc};  
        for (n = 0; n < 4 ; n++){  
            for (j=0;j<4;j++){  
                tab1[v++]=tab2[n]>>(j*8);  
            }  
        }  
        return 0;
    
    }  
    

    @+
    Ce n'est pas parce que certaines choses semblent inexplicables, qu'il faut faire semblant de les expliquer!
    1. merci, ça marche bien, mais est ce que je peux utiliser que le type unsigned char???
    2. salut,
      si ton tableau tab1 contient que des valeurs de 0x00 à 0xFF, ben y'a pas de problème...
      si tu veux utiliser des int, faut modifier légèrement la boucle....
      un truc du style:
      ulong mask=0x000000FF;
      int val;
      int tab1[16];
      for (n = 0; n < 4 ; n++){
      for (j=0;j<4;j++){
      tab1[v++]=(tab2[n]>>(j*8))&mask;
      }
      }
    3. dacc, merci bien :)