Changement de type de variable

Changement de type de variable - C++ - Programmation

Marsh Posté le 30-10-2002 à 21:55:27    

Je voudrai en fait changer (en C++) une varaible unsigned et un vecteur de 2 char (16bits->2*8bits) suis-je obligé de le faire en assembleur ou y a-t-il une meilleur technique?

Reply

Marsh Posté le 30-10-2002 à 21:55:27   

Reply

Marsh Posté le 30-10-2002 à 22:13:11    

tu peux etre plus précis ? que veux tu faire exactement ? un cast ?  :??:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-10-2002 à 22:16:32    

unsigned short a;
char vect[2];
 
vect[0] = a & 00FF;
vect[1] = (a & FF00) >> 8;

Reply

Marsh Posté le 30-10-2002 à 22:34:43    

MERCI!  :)

Reply

Marsh Posté le 30-10-2002 à 22:51:25    

Ace17 a écrit a écrit :

unsigned short a;
char vect[2];
 
vect[0] = a & 0x00FF;
vect[1] = (a & 0xFF00) >> 8;



Reply

Marsh Posté le 30-10-2002 à 23:06:54    

Ace17 a écrit a écrit :

unsigned short a;
char vect[2];
 
vect[0] = a & 00FF;
vect[1] = (a & FF00) >> 8;




 
pourquoi tu veux pas faire une union? ou un truc portable? qui te dit qu'un short est sur 16 bits et un char sur 8?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 30-10-2002 à 23:51:52    

et dans l'autre sens je suppose ke c'est :

Code :
  1. unsigned short a;
  2. char vect[2];
  3. a = (unsigned) vect[0];
  4. a<<8;
  5. a+= (unsigned) vect[1];


 
???

Reply

Marsh Posté le 31-10-2002 à 02:53:24    

Code :
  1. unsigned short a;
  2. char vect[2];
  3. char* trans= (char*)&a;
  4. vect[0] = trans[0];
  5. vect[1] = trans[1];

Pour l'inverse, je te laisse chercher...
 
Mais Taz a raison...

Code :
  1. union mix{
  2. unsigned short a;
  3. char vect[2];
  4. };
  5. mix.a= ...;
  6. mix.vect[0]; //premier octet


C'est bizarre... J'ai vu ça il n'y pas longtemps ;) .


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 31-10-2002 à 09:09:00    

Taz@PPC a écrit a écrit :

 
 
pourquoi tu veux pas faire une union? ou un truc portable? qui te dit qu'un short est sur 16 bits et un char sur 8?




 
unsigned short a;
char vect[2];
 
memcpy(vect, &a, sizeof(vect));


Message édité par Ace17 le 31-10-2002 à 09:09:14
Reply

Marsh Posté le 31-10-2002 à 18:11:40    

dans cette exemple :

Code :
  1. #include<iostream.h>
  2. #include<fstream.h>
  3. template<class Type>
  4. void fOut(Type a)
  5. {
  6. unsigned x=sizeof(Type);
  7.            
  8. cout<<a<<endl;
  9. char* trans= (char*)&a;
  10. ofstream file("Test.txt" );
  11. file.write(trans, x);
  12. file.close();
  13. }
  14. template<class Type>
  15. void fIn()
  16. {
  17. unsigned x=sizeof(Type);
  18. char* trans=new char[x];
  19.  
  20. ifstream file("Test.txt" );
  21.    file.read(trans,x);
  22. file.close();
  23. for(unsigned j=0; j<x; j++)
  24.  cout<<trans[j];
  25. cout<<endl;
  26. Type a=(Type) *trans;
  27. cout<<a<<endl;
  28. delete[] trans;
  29. }
  30. void main()
  31. {
  32. unsigned a=127;
  33. fOut(a);
  34. fIn<unsigned>();
  35. a=128;
  36. fOut(a);
  37. fIn<unsigned>();
  38. }


 
pourkoi ça ne marche ke jusk'à a==127   :heink:


Message édité par peak le 31-10-2002 à 18:12:13
Reply

Marsh Posté le 31-10-2002 à 18:11:40   

Reply

Marsh Posté le 01-11-2002 à 03:10:55    

127 est le maximum d'un char s'il est signé.
 
Mais c'est bizarre, ça ne devrait pas affecter ton code...


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 01-11-2002 à 15:05:38    

Je savais pô k'on pouvait signer ou pas un char?

Reply

Marsh Posté le 01-11-2002 à 15:40:53    

ça marche deja mieux (en remplacant char par unsigned char) mais y'a comme même encore un prob dans la fonction "fIn()"; j'ai bien la solution voulu dans mon vecteur "trans" mais il n'y a jamais ke les bits de poids faible ki sont assigné à "a"???
 
p.ex: 134 -> 134
      255 -> 255
      256 -> 0
      257 -> 1
      65535 -> 255  
 
l'erreur se situe donc d'office dans "Type a=(Type) *trans;"  :fou:

Reply

Marsh Posté le 02-11-2002 à 14:03:24    

:cry:  :cry:  :cry:  
 
Comment ke je fait moi???
 :cry:  personne me répond :cry:
Dites moi au moins ce ke vous en pensé, si vous avez une meillieur solution mais là je suis bloké!
 
En fait je voudrai juste arrivé à sauver et charger une variable sur un fichier
 
Est-ce ke "fstream.h" ne marche ke pour les fichier text??
Est-ce ke  "memcpy(vect, &a, sizeof(vect)); " est une meillieur solution??
 
 :??:  :??:  :??:  
 
 
 

Reply

Marsh Posté le 05-11-2002 à 00:01:56    

Code :
  1. char* trans=...;
  2. Type a= (Type)*trans; //transforme un char en Type
  3. Type a= *(Type*)trans; //lit un Type là ou pointe trans

Le type du pointeur vaut plus que le type de la variable assignée.
 
Pendant que j'y suis:

Code :
  1. #include<iostream.h>
  2. #include<fstream.h>

Les headers ".h" sont obsolete en C++.

Code :
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std; //au plus simple


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed