Salut tout le monde
j'ai une souci pour convertir un int en unsigned char[]
voir le code c++ qui affiche l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int a=100; unsigned char ch[]=(unsigned char[])a;
Salut tout le monde
j'ai une souci pour convertir un int en unsigned char[]
voir le code c++ qui affiche l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int a=100; unsigned char ch[]=(unsigned char[])a;
Salut, et bienvenue sur le forum.
Pourrais tu être un peu plus précis sur ce que tu souhaites faire
Si l'idée est de pouvoir convertir une variable de type int en chaine de caractères, je te conseillerais volontiers de faire un petit tour du coté de la FAQ.
Si l'idée est "simplement" de pouvoir utiliser les quatre octets d'un entier sous la forme de caractère (donc d'une variable capable de ne représenter que 255 valeurs), tu pourrais parfaitement utiliser memcpy ou reinterpret_cast (l'entrée de la FAQ portant sur la lecture de fichiers binaires peut te servir d'exemple):
Fais attention au fait que tu risque d'être confronté à des problèmes de boutisme en travaillant de la sorte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int i=132456687; unsigned char tab[4]; memcpy(tab, &int); for(int j=0;i<4;++j) cout<<tab[j]<<endl;![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Ca dépend de ce que tu entend par convertir (il y a rarement un seul sens à convertir). Si tu cherche à créer un tableau d'unsigned char avec la valeur de a dans la première case tu peux faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned char ch[] = {a};
Merci j'ai résolu mon problème avec cast de int en char puis de ce char en unsigned char
voir le code c++:
Mais est ce que je peut allouer de memoire pour les tableau sans ecrire 256 comme l'exemple de malloc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int i; char buffer [256]; i=100; itoa (i,buffer,10); printf ("decimal: %s\n",buffer); unsigned char reg[256]; sprintf((char*)reg,"%s",buffer); printf ("voila: %s\n",reg);
Mais, là, tu fais du C, et non du C++...
Ce n'est pas faux en soi, mais ce n'est pas cette section
Alors, si tu veux coder en C, dis le nous, nous changerons ta question de rubrique, autrement, nous pouvons réellement te conseiller:
- d'utiliser la classe string (disponible dans l'espace de noms std, par inclusion du fichier d'en-tête <string> )
- d'utiliser les flux de conversion tels qu'indiqués dans les liens que je fourni dans ma première réponse
Tu peux toujours décider de créer un tableau de manière dynamique plutôt qu'un tableau de taille fixe...Mais est ce que je peut allouer de memoire pour les tableau sans ecrire 256 comme l'exemple de malloc
Il faut juste veiller:
- à ce que la taille du tableau dynamique soit suffisante pour contenir tous les éléments
- à correctement libérer la mémoire allouée à ton tableau une fois que tu n'en a plus besoin
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
il ne s'agissait donc pas d'une 'conversion'
vous savez, vous pouvez directement utiliser itoa avec un unsigned char *
indépendamment de cela, copier un tableau de caractères dans un autre via sprintf c'est vraiment pas efficace, strcpy est là pour cela
un tableau de 256 caractères c'est vraiment beaucoup trop, même avec une machine 64 bits il aurait suffit de 24
quel exemple ?comme l'exemple de malloc
Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour)
N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML
c'est vrai mais j'utilise une dll qui demande unsigned char en paramètre de fonction qu'elle contient mais juste une question pour malloc elle travail avec les pointer commemais comment je peut l'utiliser avec le type
Code : Sélectionner tout - Visualiser dans une fenêtre à part char *buffer = (char *) malloc(sizeof(char));
comment je peut l'utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part char buffer[]
Merci pour vos aides![]()
Tu confonds...
Le type, c'est... char, quoi qu'il arrive...
char * indique qu'il s'agit... d'un pointeur sur une variable de type char (un pointeur n'étant qu'une variable contenant... l'adresse à laquelle se trouve la variable réellement utilisée)
char [] indique qu'il s'agit... d'un tableau de caractère dont le nombre d'éléments est indiqué entre les crochets ou, à défaut, suffisamment important pour représenter le nombre d'éléments donnés lors de l'initialisation (qui doit alors avoir lieu au moment de la déclaration de la variable).
Or, en C et en C++, un tableau est identifié par... l'adresse à laquelle se trouve le premier élément de celui-ci.
Ainsi, le code suivant est tout à fait valide et correct:
La seule chose que tu ne pourra pas faire, c'est
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 char tab[10]; char *ptr=tab; //ptr pointe sur... tab[0]; for( int i=0;i<10;++i) { /*...*/ ++ptr; // ptr pointera respectivement sur tab[1],tab[2], tab[3], ... }
Donc, si tu veux gérer dynamiquement la taille de ton tableau, tu dois le prévoir dés le départ, et utiliser un pointeur sur char:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char tab[10]; tab=(char*) malloc(sizeof(char)*12); //DANGER
Mais il faut également être conscient que cette approche est une approche pure C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void foo() { char *ptr=NULL; // initialisé à une adresse connue comme invalide /* ...*/ if(!ptr) // si ptr ne pointe encore sur rien ptr=(char*)malloc(sizeof(char)* taille); else //sinon, il faut utiliser realloc ptr=(char*)realloc(sizeof(char)* nouvelle_taille); /* on peut utiliser ptr ici */ }![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Tu peux faire à la rigueur qqch comme cela:
mais tu ne peux pas déclarer un tableau:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int a=100; unsigned char ch[UCHAR_MAX]; ch[0]=(unsigned char)a;
car le type est incomplet. Il faut la taille
Code : Sélectionner tout - Visualiser dans une fenêtre à part unsigned char ch[];
Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour)
N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML
c'est pas la taille standard que peux prendre tableau de d'Uchar?que viens faire UCHAR_MAX dans cette histoire ?
il n'y a pas de taille 'standard' pour les tableaux
UCHAR_MAX est la valeur max que peut prendre un unsigned char, donc 255 pour un caractère mémorisé sur 8 bits
Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour)
N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML
Partager