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

Fermé
xtimas - 22 juin 2010 à 10:54
xtimas Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2011 - 22 juin 2010 à 15:59
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

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 22/06/2010 à 15:06
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!
0
xtimas Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2011
22 juin 2010 à 15:24
merci, ça marche bien, mais est ce que je peux utiliser que le type unsigned char???
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 22/06/2010 à 15:47
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;
}
}
0
xtimas Messages postés 11 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 15 juin 2011
22 juin 2010 à 15:59
dacc, merci bien :)
0