Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1796 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Probleme de mapping memoire[résolu]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de mapping memoire[résolu]

n°1141694
deff
Monde de merde
Posté le 06-07-2005 à 10:11:27  profilanswer
 

bonjour,
 
voici mon probleme :
 
j'ai une structure :  

Code :
  1. typedef struct {
  2.   unsigned int  var1;
  3.   unsigned char var2;
  4.   unsigned char var3;
  5. }struc_mod_part;


 
et un tableau :

Code :
  1. unsigned char tab[sizeof(struc_mod_part)];


 
j'aimerai recopier les donnée de l'un dans l'autre, c'est à dire si struc_mod_part.var2 = 6 alors tab[2]==6
 
il y a t'il un moyen simple ??


Message édité par deff le 06-07-2005 à 15:56:26
mood
Publicité
Posté le 06-07-2005 à 10:11:27  profilanswer
 

n°1141708
Elmoricq
Modérateur
Posté le 06-07-2005 à 10:21:33  profilanswer
 

deff a écrit :

et un tableau :

Code :
  1. unsigned char tab[sizeof(struc_mod_part)];




 
Euh, tu es sûr de ton coup, là ?  :heink:  
 
Parce que sizeof retourne le nombre de bytes occupés par ta structure, tu es certain que c'est ce que tu veux comme nombre de valeur dans ton tableau ?

n°1141732
deff
Monde de merde
Posté le 06-07-2005 à 10:36:23  profilanswer
 

ben je pense  :pt1cable:  
je veux que mon tableau ai la meme taille que ma structure.
 
c pas bon ????

n°1141736
Elmoricq
Modérateur
Posté le 06-07-2005 à 10:40:01  profilanswer
 

deff a écrit :

ben je pense  :pt1cable:  
je veux que mon tableau ai la meme taille que ma structure.
 
c pas bon ????


 
Par "la même taille", tu entends quoi au juste ?
Il faut bien voir que ce que tu es en train de faire, c'est de définir un tableau de bytes non signés dont le nombre d'éléments est égal au nombre de bytes qu'occupe ta structure en mémoire.
Y a moyen de faire quelque chose, mais ça dépend de ce que tu cherches à faire, et il y a peut-être moyen de faire plus simple.
 
 
Tu veux faire quoi exactement ?
 
 
EDIT : 4 x "faire" en deux phrases, vive mon vocabulaire varié  [:jar jar]


Message édité par Elmoricq le 06-07-2005 à 10:49:04
n°1141739
chicotruss
Posté le 06-07-2005 à 10:43:23  profilanswer
 

tu peux peut etre essayer de faire qqch avec ca:
 

Code :
  1. memcpy((char*)tab, (char*)&struc_mod_part, sizeof(struc_mod_part);


 
ca copie les données apres faut voir dans quel ordre elles sont placées (ca dépend peut etre du compilo) mais y a des chances que ce soit sous la forme:
 

Code :
  1. unsigned int var1 = *((unsigned int*)tab);


unsigned char var2 = tab[4];
unsigned char var3 = tab[5];

Code :
  1. unsigned char var2 = tab[sizeof(unsigned int)];
  2. unsigned char var3 = tab[sizeof(unsigned int) + 1];


 
ou alors
 

Code :
  1. unsigned char var3 = tab[0];
  2. unsigned char var2 = tab[1];
  3. unsigned int var1 = *((unsigned int*)(tab + 2));


 

Citation :

si struc_mod_part.var2 = 6 alors tab[2]==6


 
(mais bon ca te donnera pas var1 <-> tab[1], var2 <-> tab[2], etc)


Message édité par chicotruss le 06-07-2005 à 10:51:59
n°1141745
Elmoricq
Modérateur
Posté le 06-07-2005 à 10:47:25  profilanswer
 

chicotruss a écrit :

Code :
  1. unsigned int var1 = *((unsigned int*)tab);
  2. unsigned char var2 = tab[4];
  3. unsigned char var3 = tab[5];




 
 
Et si c'est compilé sur une plateforme 64 bits ? Ou 16 bits ?  :o  
 
En plus je voudrais savoir ce qu'il veut faire exactement, car je ne vois pour l'instant pas l'intérêt de la chose.

n°1141766
deff
Monde de merde
Posté le 06-07-2005 à 10:58:05  profilanswer
 

je veux simplement recopier les données qui sont dans une structure et les mettre dans un tableau de byte.
 
apres le but final, c'est une autre histoire....

n°1141781
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-07-2005 à 11:10:11  profilanswer
 

deff a écrit :

je veux simplement recopier les données qui sont dans une structure et les mettre dans un tableau de byte.


memcpy()


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1142187
deff
Monde de merde
Posté le 06-07-2005 à 15:08:29  profilanswer
 

non ça n'a pas l'air de bien marcher avec memcpy.
 
j'ai fait cette essai :

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, char *argv[])
  4. {
  5.  
  6. typedef struct
  7.   unsigned int  var1;
  8.   unsigned char var2;
  9.   unsigned char var3; 
  10. }struc_mod_part;
  11. unsigned char tab[10]={1,1,1,1,1,1,1,1,1,1};
  12. struc_mod_part mp;
  13. mp.var1=0x1122;
  14. mp.var2=0x33;
  15. mp.var3=0x44;
  16. memcpy((unsigned char*)tab, (unsigned char*)&mp, sizeof(struc_mod_part));
  17. printf("%x %x %x %x %x %x %x %x %x %x\n",tab[0],tab[1],tab[2],tab[3],tab[4],tab[5],tab[6],tab[7],tab[8],tab[9]);
  18.    return 0;
  19. }


 
ça me retourne : 22 11 0 0 33 44 4 8 1 1
 
au lieu de : 22 11 33 44 1 1 1 1 1 1
 
 
??????

n°1142212
Elmoricq
Modérateur
Posté le 06-07-2005 à 15:15:55  profilanswer
 

Normal : unsigned int sur ta plateforme = 4 bytes, donc peu importe comment tu l'initialises, ça occupera 4 bytes, donc 4 cases de ton tableau.

mood
Publicité
Posté le 06-07-2005 à 15:15:55  profilanswer
 

n°1142233
Emmanuel D​elahaye
C is a sharp tool
Posté le 06-07-2005 à 15:25:30  profilanswer
 

deff a écrit :

non ça n'a pas l'air de bien marcher avec memcpy.
 

Code :
  1. typedef struct
  2.   unsigned int  var1;
  3.   unsigned char var2;
  4.   unsigned char var3; 
  5. }struc_mod_part;




Dans une structure, il peut y avoir des bytes de padding... Il est temps d'ouvrir ton livre de C...
 
Mapper une structure sur un tableau de char produit un résultat qui dépend de l'implémentation. C'est pas portable.


Message édité par Emmanuel Delahaye le 06-07-2005 à 15:26:05

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1142275
deff
Monde de merde
Posté le 06-07-2005 à 15:56:07  profilanswer
 

ok ça marche maintenant !
j'ai changé les int en short et c'est ok.
 
merci pour tout.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Probleme de mapping memoire[résolu]

 

Sujets relatifs
Debutant cherche help!! redirection[resolu thx gatsusat]formulaire => name [RESOLU]
(RESOLU) syntaxe echo"document.write('....')";Variable qui compte le nombre d'enregistrements d'une table [RESOLU]
[Résolu] Pub et W3CFloat : comportement inattendu sous FF [Résolu]
Validator problèmeUn p'tit problème sue access
probleme pour récupérer une variable dans un textarea[Résolu] [VC++] Style visuel XP et manifest
Plus de sujets relatifs à : Probleme de mapping memoire[résolu]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR