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

  FORUM HardWare.fr
  Programmation
  C++

  question sur les char *

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

question sur les char *

n°2010502
in_your_ph​ion
Posté le 20-07-2010 à 21:38:58  profilanswer
 

bonjour à tous,

 

voila mon problème, ou plutôt ma question, est ce que si on prend un pointeur qui pointe vers une structure, on peut la lire comme une chaine de charactères ? Je m'explique :

 

Par exemple j'ai la structure suivante :

Code :
  1. struct Obj {
  2. public:
  3.         int a;
  4.         char b[3];
  5.         float c;
  6. };
 

Est ce que je peux considérer un pointeur de char* dessus, et espérer retrouver les valeurs des champs ? cad :

Code :
  1. //        13                            3.14f  
  2. //  --------------- 'T' 'H' 'C'  ---------------
  3. // | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
  4. int main() {
  5.         Obj o;
  6.        //initialisation des champs avec des valeurs
  7.         o.a = 13;
  8.         memcpy(o.b,"THC",sizeof(char)*3);
  9.         o.c = 3.14f; 
  10.         char * p = (char*)&o; //ici un pointeur vers mon objet (avec un cast crado)
  11.         //et là, j'essaie de retrouver les valeurs à partir du pointeur :
  12.         printf("%d\t%c%c%c\n",
  13.                                          *(int*)p,
  14.                                          *(char*)(p+4),*(char*)(p+5),*(char*)(p+6));
  15.         p+=8;
  16.         printf("%f\n",*(float*)p);
  17.         std::cin.get();
  18.         return 0;
  19. }
 

mais, ce que je ne comprend pas, c'est pourquoi pour retrouver ma valeur de float o.c = 3.14f, je suis obligé d'aller à la case huit! pourquoi ce n'est pas la case 7 plutot ? comme sur mon schéma en commentaires...

 

Si vous avez compris et savez pourquoi, merci!! :)


Message édité par in_your_phion le 20-07-2010 à 21:43:00
mood
Publicité
Posté le 20-07-2010 à 21:38:58  profilanswer
 

n°2010522
Joel F
Real men use unique_ptr
Posté le 20-07-2010 à 22:12:16  profilanswer
 

les membres des structures sont alignés sur 32/64 bits.
3 char deviennent 4 char etc

n°2010523
in_your_ph​ion
Posté le 20-07-2010 à 22:14:35  profilanswer
 

Joel F a écrit :

les membres des structures sont alignés sur 32/64 bits.
3 char deviennent 4 char etc

 

Arf. Donc si je veux que les données soient consécutives, je n'ai pas d'autre choix que de tout recopier dans un buffer les unes à la suite des autres ?


Message édité par in_your_phion le 20-07-2010 à 22:14:51
n°2010535
Joel F
Real men use unique_ptr
Posté le 20-07-2010 à 22:36:23  profilanswer
 

mets ton char[3] a la fin.

n°2010538
in_your_ph​ion
Posté le 20-07-2010 à 22:41:03  profilanswer
 

Joel F a écrit :

mets ton char[3] a la fin.

 

en fait l'ordre est important  :( je dois d'abord fournir le champ int en premier, ensuite un char[3], etc ... Je suis obligé de copier le tout dans un buffer je crois, non ?


Message édité par in_your_phion le 20-07-2010 à 22:41:13
n°2010540
Joel F
Real men use unique_ptr
Posté le 20-07-2010 à 22:44:41  profilanswer
 

google attribute packed

n°2010548
in_your_ph​ion
Posté le 20-07-2010 à 22:57:44  profilanswer
 

Joel F a écrit :

google attribute packed


 
merci :) mais il faudrait en plus que ma solution soit portable sur tous les Os (sun, linux, sparc, windows, etc) et je ne sais pas si __attribute__((__packed__)) le permet

n°2010560
Joel F
Real men use unique_ptr
Posté le 21-07-2010 à 06:49:42  profilanswer
 

c'est compilo dependant, pas OS dependant.
Sous MSVC ca s'appelle #pragma pack


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

  question sur les char *

 

Sujets relatifs
une question de closeCursor ?Question sur les autotools
[struts] question bête sur action[help] pour créer un assistant d'install avec IExpress et/ou *.bat
[RESOLU] question con mais utile image en htmlSite perso attaqué : index.* => 0 ko
Question CSS : position:relative;top:-40px ... et gap de 40pxQuestion à intégrateurs HTML/CSS
voir 4 eme reponse probleme chonometre 
Plus de sujets relatifs à : question sur les char *


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