Convertir char* à u_int8_t
Je transfert message par le biais d'un protocole can.
Pour ce faire, le POUVEZ message de besoin de données de u_int8_t type. J'ai donc besoin de convertir mon char* à u_int8_t. Avec mes recherches sur ce site, je produire ce code :
char* bufferSlidePressure = ui->canDataModifiableTableWidget->item(6,3)->text().toUtf8().data();//My char*
/* Conversion */
uint8_t slidePressure [8];
sscanf(bufferSlidePressure,"%c",
&slidePressure[0]);
Comme vous pouvez le voir, mon char*
doit s'inscrire dans sliderPressure[0]
.
Mon problème est que même si je n'ai aucune erreur lors de la compilation, les données dans slidePressure sont totalement incorrectes. En effet, je l'ai tester avec un char* = 0
et je 'ai unknow personnages ... Donc je pense que le problème doit venir de la conversion.
Mes données peuvent être Bool, Uchar, Ushort and float
.
Merci pour votre aide.
- "char* = 0" signifie "bufferSlidePressure == 0"? Si oui, pas de données seront converties.
- Cela signifie bufferSlidePressure = '0'
- veuillez présenter la contribution& valeur de sortie. Le code suivant peut afficher la bonne valeur:
char* buf = "0"; uint8_t slide[8]; sscanf(buf, "%c", &slide[0]); printf("%d", slide[0]);
Vous devez vous connecter pour publier un commentaire.
Est votre chaîne d'un nombre? E. g.
char* bufferSlidePressure = "123";
?Si oui, je voudrais tout simplement faire:
Ou, si vous avez besoin de le mettre dans un tableau:
Edit: Suite à vos commentaires, si vos données pourrait être n'importe quoi, je suppose que vous auriez à le copier dans la mémoire tampon du nouveau type de données. E. g. quelque chose comme:
memcpy()
(voir mon edit).char
àuint8_t
dans mon dernier exemple, et cela devrait fonctionner. Si vous souhaitez copier à unuint8_t
, puissize=1
. Sinon, vous copiez une série deuint8_t
. Voir aussi memcpy de la documentation.u_int8_t 8 bits de la mémoire, et peut stocker des valeurs de 0 à 255
char est probablement 8 bits de mémoire
char * est probablement 32 bits ou 64 bits de la mémoire contenant l'adresse d'un endroit différent de la mémoire dans lequel il y a un char
Tout d'abord, assurez-vous de ne pas essayer de mettre l'adresse de la mémoire (char *) dans le uint8 - mettre ce qu'il désigne dans:
Ensuite travailler sur ce que vous êtes vraiment essayer de faire ... parce que ce n'est pas tout à fait sensées. Par exemple, un flotteur est probablement 32 ou 64 bits de mémoire. Si vous pensez que c'est un float quelque part dans votre char * données que vous avez beaucoup d'explications à donner avant que nous pouvons vous aider :/
Plus sûre exemple en C++ façon
Aussi, si le boost est disponible
char *
est un pointeur, pas un seul caractère. Il est possible qu'il indique le caractère que vous voulez.uint8_t
est pas signé, mais sur la plupart des systèmes seront de la même taille comme unchar
et vous pouvez simplement convertir la valeur.Vous pourriez avoir besoin pour gérer la mémoire et la durée de vie de ce que votre fonction retourne. Cela pourrait être fait avec
vector< unsigned char>
que le type de retour de ta fonction, plutôt que dechar *
, surtout si toUtf8() a pour créer la mémoire pour les données.Votre question est totalement ambigu.
C'est beaucoup d'appels en cascade. Nous n'avons aucune idée de ce qu'elles font et qu'elles sont les vôtres ou non. Il a l'air dangereux.