[VC++] unsigned char* / char*

unsigned char* / char* [VC++] - Programmation

Marsh Posté le 29-06-2001 à 11:31:53    

Bonjours,
 
J'aimerais connaitre la difference entre ces deux types et savoir s'il existe une fonction permettant de passer de l'un a l'autre .
 
Merci.


---------------
BUD...
Reply

Marsh Posté le 29-06-2001 à 11:31:53   

Reply

Marsh Posté le 29-06-2001 à 11:48:26    

bud8 a écrit a écrit :

Bonjours,
 
J'aimerais connaitre la difference entre ces deux types et savoir s'il existe une fonction permettant de passer de l'un a l'autre .
 
Merci.  




 
Salut,
 
La difference entre un char et un unsigned char est simple.
 
Le char est en fait un signed char cela veut dire qu'il contient une info de signe.
 
 
Un char (signed ou unsigned) est code sur 8 bits.
 
Pour le unsigned char, les 8 bits servent a coder la valeur numerique et aucun bit pour le signe donc la valeur va de 0 a 255.
 
Pour le (signed) char, 7 bits servent a coder la valeur numerique et 1 bit pour le signe donc la valeur va de -128 a 127.
 
Sinon pour passer d'un char* a un unsigned char* il suffit de caster.
 
exemple:
 
char* pChar;
unsigned char* pUChar;
 
pChar = (char*) pUChar;
pUChar = (unsigned char*) pChar;
 
Voila en fait comme tu as des pointeurs ceux ci contiennent tous une adresse, mais en castant tu force le type de donnees vers lequel il pointe c'est tout.
 
J'espere avoir ete a peu pres clair.
 
Tchao.

Reply

Marsh Posté le 29-06-2001 à 19:45:29    

à savoir que tant que l'on reste dans les char ou unsigned char, les additions, les ops logiques, les soustractions se comportent pareil, qu'il s'agisse d'unsigned char ou de char. La où joue la différence de type, c'est quand il faut étendre les données
(conversion vers un type avec plus de données)
 
char c=-3;
unsigned char uc=c;
int i=c;
cout<<i;        //i=-3
int j=uc;       //(256-3)=253
 
ou quand on fait des + ou des *.
 
Si tu traites ds chaînes de caractères, pas de souci sur char ou unsigned char. Pour le reste, choisis.
(je pense que le champ d'application des (signed) char en opérations arithmétiques est limité vu la mémoire qu'on a ajourd'hui)


---------------
-----------------------
Reply

Marsh Posté le 01-07-2001 à 22:34:37    

Petits details :  
-les char font au moins 8 bits il peuvent faire plus (32 par exemple) sur certaines machines/compilo.
 
-en C++ on ne cast plus en faisant  
pChar = (char*) pUChar;  
mais
pChar = static_cast<char*> pUChar; ...
ou
pChar = reinterpret_cast<char *> pUChar;

Reply

Marsh Posté le 01-07-2001 à 23:58:53    

ah, voici une preuve de raffinement!


---------------
-----------------------
Reply

Marsh Posté le 02-07-2001 à 00:20:56    

Quel Don Juan ce Janos ! :D

Reply

Marsh Posté le 02-07-2001 à 09:50:00    

BENB a écrit a écrit :

Petits details :  
-les char font au moins 8 bits il peuvent faire plus (32 par exemple) sur certaines machines/compilo.
 
-en C++ on ne cast plus en faisant  
pChar = (char*) pUChar;  
mais
pChar = static_cast<char*> pUChar; ...
ou
pChar = reinterpret_cast<char *> pUChar;  




 
Je te remercie mais lorsque je fais du cast, j'obtiens qqch d'incomprehensible dans ma variable .
Pour info, je realise un plug in qui m'oblige a recuperer un unsigned char * .
Hors si je convertie les pointeurs  
returnedValue= reinterpret_cast<unsigned char *> (concat);
La valeur recuperée est nulle
Donc je doit travailler sur les valeurs elles meme :
*returnedValue= static_cast<unsigned char > (*concat);
et la la valeur est icomprehensible !!!
 
J'ai due oublier qqch mais j'vois pas quoi  :cry:  
 
Donc merci si tu peux m'aider ...


---------------
BUD...
Reply

Sujets relatifs:

Leave a Replay

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