unsigned char* / char* [VC++] - Programmation
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.
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)
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;
Marsh Posté le 01-07-2001 à 23:58:53
ah, voici une preuve de raffinement!
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
Donc merci si tu peux m'aider ...
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...