Conversion de int en char
meherTABARKA
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
meherTABARKA Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
meherTABARKA Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous
J'ai eu une fonction qui retourne des données de types uint8_t ( unsigned interger 8 bits) je veux envoyer ces données via le port série ceci necessite une fonction ayant des entrées de type unsigned char*
je veux savoir s'il y'a une fonction qui converti uint8_t à unsigned char* autre que sprintf
Y'a t'il quelqu'un qui peut m'aider à propos de ceci ??
Merci d'avance.
J'ai eu une fonction qui retourne des données de types uint8_t ( unsigned interger 8 bits) je veux envoyer ces données via le port série ceci necessite une fonction ayant des entrées de type unsigned char*
je veux savoir s'il y'a une fonction qui converti uint8_t à unsigned char* autre que sprintf
Y'a t'il quelqu'un qui peut m'aider à propos de ceci ??
Merci d'avance.
A voir également:
- Conversion de int en char
- Logiciel gratuit conversion calendrier républicain - Télécharger - Études & Formations
- Coco char - Accueil - Réseaux sociaux
- Conversion mb en go ✓ - Forum Mail
- Conversion bytes en mo - Forum Réseau
- Monnaie conversion - Télécharger - Banque & Budget
4 réponses
'lut,
Si ta fonction prend la taille des données (en octets) comme argument, alors
Si elle prend juste une série et s'attend à un caractère NUL pour déterminer la fin, il faudra faire comme ceci:
from human import idiocy
del idiocy
uint8_tet
unsigned charc'est la même chose sur la grande plupart des systèmes. Un
unsigned char*pointe juste vers un ou plusieurs
unsigned char, généralement c'est un string, mais ça peut aussi être juste une séquence d'entiers 8bits.
Si ta fonction prend la taille des données (en octets) comme argument, alors
uint8_t monOctet = 0xAF; envoi_serie(*monOctet, 1);enverra l'octet.
Si elle prend juste une série et s'attend à un caractère NUL pour déterminer la fin, il faudra faire comme ceci:
uint8_t mesOctets[] = {0xAF, 0x00}; envoi_serie(mesOctets);
from human import idiocy
del idiocy
Bonjour,
je vous remercie pour votre réponse,
mais je ne l'ai pas compris
En faut dans mon programme j'ai eu une fonction qui capte la puissance des données reçues ( la puissance en dBm elle peut être entre -150 et 0 )donc le type est int8_t ensuite je veux envoyé cette valeur via le port série mais la fonction qui sert à envoyé via le port série nécessite que la "data" à envoyer doit être de type unsigned char* pour cela je doit donc converti cette valeur en int8_t en unsigned char* comment je peu faire ??
je vous remercie pour votre réponse,
mais je ne l'ai pas compris
En faut dans mon programme j'ai eu une fonction qui capte la puissance des données reçues ( la puissance en dBm elle peut être entre -150 et 0 )donc le type est int8_t ensuite je veux envoyé cette valeur via le port série mais la fonction qui sert à envoyé via le port série nécessite que la "data" à envoyer doit être de type unsigned char* pour cela je doit donc converti cette valeur en int8_t en unsigned char* comment je peu faire ??
Bien comme au dessus, tu prend ta valeur
int8_tqui fait déjà 1 octet, et pour l'avoir en
unsigned char*, type accueillant n'importe quel type de données (des octets, tout simplement) quand on veut lire/écrire un fichier/port série/autre, il suffit d'en récupérer l'adresse en mémoire (d'ailleurs la syntaxe de ma réponse est erronée, c'est
&monOctetau lieu de
*monOctet) pour la passer à ta fonction, et préciser que tes données font 1 octet de long.
Excusez moi mais j'ai pas quand même compris la réponse et comment ça se passe pour la résolution
*****************************************
if (rxPacket.packet[i] == 's')
{
putchar(rxPacket.packet[i]);
rss=rxPacket.rssi;
*s1=rss;
//sprintf(s1,"%d", rss);
printf(" s1 est %c\r\n", s1);
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
*****************************
ceci la partie de mon code rss est la valeur de la puissance que je la récupére de packet reçu "rxPacket
J'ai déclaré une variable unsigned char* s1; pour que je puisse l'affecter la valeur de la puissance rss mais toujours y'a pas de nouveau et j'aurai pas de résultat
à noter que:
s est la valeur que je l'utilise comme étant une donnée reçu
sendData est la fonction d'envoi 1 est la longueur de la "data" à envoyer et TYPE_SERIAL veut dire envoyer des données type série
s'il vous plaie m'écrivez votre proposition pour ceci je veu envoyer rss qui est de type int8_t par la fonction senData qui n'accepte que les données de type unsigned char**
Désolé pour la dérange
*****************************************
if (rxPacket.packet[i] == 's')
{
putchar(rxPacket.packet[i]);
rss=rxPacket.rssi;
*s1=rss;
//sprintf(s1,"%d", rss);
printf(" s1 est %c\r\n", s1);
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
*****************************
ceci la partie de mon code rss est la valeur de la puissance que je la récupére de packet reçu "rxPacket
J'ai déclaré une variable unsigned char* s1; pour que je puisse l'affecter la valeur de la puissance rss mais toujours y'a pas de nouveau et j'aurai pas de résultat
à noter que:
s est la valeur que je l'utilise comme étant une donnée reçu
sendData est la fonction d'envoi 1 est la longueur de la "data" à envoyer et TYPE_SERIAL veut dire envoyer des données type série
s'il vous plaie m'écrivez votre proposition pour ceci je veu envoyer rss qui est de type int8_t par la fonction senData qui n'accepte que les données de type unsigned char**
Désolé pour la dérange
unsigned char* s1est n'est pas initialisée; elle peut donc contenir n'importe quelle adresse, et y écrire quelque chose peut faire planter ton programme.
Non, il faut faire
s1 = &rss;pour qu'
s1pointe vers le contenu de la variable
rss. Mais il faut alors que
rsssoit du type
int8_t.
Et
%cdans le
printfs'attend à un paramètre de type
char, pas
char*, il faut donc aller chercher la valeur pointée:
printf(" s1 est %c\n", *s1);Aussi, le
\rn'est pas nécessaire car si ton OS respecte le standard C (mais on sait tous que Microsoft et les standards ça fait 2),
\ndevient le/les caractère(s) de retour à la ligne (CR+LF sur Windows).
Une fois ça corrigé, le
sendDatadevrait réussir.
Bonsoir encore je vous remercie pour votre temps,
Le même erreur existe encore en fait j'ai initialisé la valeur de s1 à une chaine vide "" et j'ai fait les modifications que vous m'avez demandé, et quand même il me donne "?" comme résultat en tant que la valeur qu'il doit m'afficher c'est -22 comme indique le message que je fait avant la phase de conversion
à noter que quand je fait la compilation un message de warning s'affiche:
Warning[Pe513]: a value of type "int8_t *" cannot be assigned to an entity of type "unsigned char *"
l'exécution au niveau transmetteur me donne :
la valeur de rssi est -22
s1 est ?
et au niveau récepteur qui va recevoir la valeur envoyée par la fonction sendData ou j'ai mis l'instruction : putchar( rxPacket.packet[i]); pour qu'il m'affiche directement la valeur qu'il a reçu l'exécution me donne :
?
Ici la nouvelle version du code
uint8_t i;
int8_t rss;
//int8_t s;
unsigned char* s1="";
/* print out any packets that were received */
if(packetReceived == TRUE)
{
for (i = 9; i <= rxPacket.packet[0]; i++)
{
if (rxPacket.packet[i] == 's')
{
printf("la valeur rssi est %d\n", rxPacket.rssi);
rss=rxPacket.rssi;
s1=&rss;
printf(" s1 est %c\n", *s1);
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
Comment je dois faire face à ce problème :(
Le même erreur existe encore en fait j'ai initialisé la valeur de s1 à une chaine vide "" et j'ai fait les modifications que vous m'avez demandé, et quand même il me donne "?" comme résultat en tant que la valeur qu'il doit m'afficher c'est -22 comme indique le message que je fait avant la phase de conversion
à noter que quand je fait la compilation un message de warning s'affiche:
Warning[Pe513]: a value of type "int8_t *" cannot be assigned to an entity of type "unsigned char *"
l'exécution au niveau transmetteur me donne :
la valeur de rssi est -22
s1 est ?
et au niveau récepteur qui va recevoir la valeur envoyée par la fonction sendData ou j'ai mis l'instruction : putchar( rxPacket.packet[i]); pour qu'il m'affiche directement la valeur qu'il a reçu l'exécution me donne :
?
Ici la nouvelle version du code
uint8_t i;
int8_t rss;
//int8_t s;
unsigned char* s1="";
/* print out any packets that were received */
if(packetReceived == TRUE)
{
for (i = 9; i <= rxPacket.packet[0]; i++)
{
if (rxPacket.packet[i] == 's')
{
printf("la valeur rssi est %d\n", rxPacket.rssi);
rss=rxPacket.rssi;
s1=&rss;
printf(" s1 est %c\n", *s1);
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
Comment je dois faire face à ce problème :(
On n'assigne pas un
Il faut changer le
unsigned char*à une chaine de caractères, mais uniquement un
const char*, mais ce n'est pas ce que tu cherches. Et comme on réassigne
s1, on perd de la mémoire -> pas bien.
Il faut changer le
%cen
%ddans le
printf, ainsi que convertir s1:
(int)(*s1), car on veut re-avoir la température sous forme décimale.
Bon j'ai eu des capteurs chacun contient un microcontrolleur programmable en langage c, j'envoie des signaux entre les capteur, le capteurs en réception va calculer la puissance du signal reçu et aprés il va la transmettre vers un capteur lié au PC pour que cette valeur sera traité ultérieurement,
Pour cela au début j'ai eu des problèmes lors de la transmission que je l'ai résolu avec l'aide de Mr @gravgun que je le remercie
mais à cette stade pour que le capteur lié au PC connait de quel capteur la valeur a été reçu je veux avec la valeur de la puissance envoyé un identifiant par exemple 1, 2, 3,
Quand je fait les transformation nécessaire le capteur lié au PC il m'affiche de fausses valeurs par exemple si la valeur est 23 et l'identifiant est 11 je veux qu'il m'affiche 2311, par contre il m'affiche 96.
Ici la partie de code pour que vous pouvez faire un coup d'oeuil afin de mieux comprendre ce que je viens d'expliquer
uint8_t i;
int16_t rss=0;
//int8_t s;
unsigned char* s1="1212";
/* print out any packets that were received */
if(packetReceived == TRUE)
{
for (i = 9; i <= rxPacket.packet[0]; i++)
{
if (rxPacket.packet[i] == 's')
{
printf("la valeur la puissance est %d\n", rxPacket.rssi);
rss=rxPacket.rssi;
printf(" rss est %d\n", rss);
s1=(unsigned char*)&rs;
printf(" s1 est %d\n", (int)(*s1));
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
}
packetReceived = FALSE;
}
Ici rss est la valeur de la puissance
sendData est la fonction d'envoi
et packetReceived est un booleén qui teste si un signal est reçu ou non
rxPacket est un signal sous forme d'un packet.
Pour cela au début j'ai eu des problèmes lors de la transmission que je l'ai résolu avec l'aide de Mr @gravgun que je le remercie
mais à cette stade pour que le capteur lié au PC connait de quel capteur la valeur a été reçu je veux avec la valeur de la puissance envoyé un identifiant par exemple 1, 2, 3,
Quand je fait les transformation nécessaire le capteur lié au PC il m'affiche de fausses valeurs par exemple si la valeur est 23 et l'identifiant est 11 je veux qu'il m'affiche 2311, par contre il m'affiche 96.
Ici la partie de code pour que vous pouvez faire un coup d'oeuil afin de mieux comprendre ce que je viens d'expliquer
uint8_t i;
int16_t rss=0;
//int8_t s;
unsigned char* s1="1212";
/* print out any packets that were received */
if(packetReceived == TRUE)
{
for (i = 9; i <= rxPacket.packet[0]; i++)
{
if (rxPacket.packet[i] == 's')
{
printf("la valeur la puissance est %d\n", rxPacket.rssi);
rss=rxPacket.rssi;
printf(" rss est %d\n", rss);
s1=(unsigned char*)&rs;
printf(" s1 est %d\n", (int)(*s1));
halCommonDelayMilliseconds(1000);
sendData(1, s1, TYPE_SERIAL);
}
}
packetReceived = FALSE;
}
Ici rss est la valeur de la puissance
sendData est la fonction d'envoi
et packetReceived est un booleén qui teste si un signal est reçu ou non
rxPacket est un signal sous forme d'un packet.