Chaine de caractere en hexa [Résolu]

virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention - 26 janv. 2012 à 11:52 - Dernière réponse : virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention
- 30 janv. 2012 à 16:01
Bonjour à tous , j'aimerais dans un algo en c ou c++ demander a un utilisateur de rentrer un chaine de caractère en hexa pour que je puisse aprés rentrer cette chaine dans un tableau pour ensuite l'afficher.
Quelqu'un pourrait-il me faire un exemple simple pour que je comprenne comment faire ??
Le but de moj programme est d'envoyer une trame par RS232 pour info .
VOILA , merci d'avance pour vos réponse
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 26 janv. 2012 à 15:38
3
Merci
Ok, donc c'est la 2 :)
Tu confonds représentation et valeur.

Une valeur quelque soit sa représentation, est la même. On est bien d'accord que 65 décimal, c'est la même valeur que 0x41. Seul la représentation change.

Ex:
int a = 65; <=> int a = 0x41; <=> int a = 0101 <=> int a = 'A';

Ou encore:
#include <stdio.h>

int main(void)
{
  int a = 65;

  printf("%i '%c' 0x%x 0x%X %o\n", a, a, a, a, a);

  return 0;
}


En d'autre terme, demander une valeur en héxadécimal ou en décimal, c'est demander une valeur et c'est tout. Tu mettras ça dans un entier dans tous les cas. Il te faut juste "parser" la chaîne de caractères, ce que fais déjà scanf et son option %x.

Petit exemple:
#include <stdio.h>

void sendTrame(int trame)
{
  printf("Envoie de la trame: 0x%x\n", trame);
  /* code */
}

int main(void)
{
  int trame = 0;
  scanf("%x", &trame);

  sendTrame(trame);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cptpingu
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 26 janv. 2012 à 13:45
0
Merci
Bonjour.

As tu regardé du côté de scanf ? Notamment les options "%X" et "%x" ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 26 janv. 2012 à 14:30
0
Merci
gaffe, je crois voir un probleme de comprehension du coté representatif (pour humain) de l'hexa

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 26 janv. 2012 à 14:34
0
Merci
@Renfield: Difficile de dire s'il veut récupérer une chaine en hexa via l'entrée standard ou s'il pense, à tord, qu'il faut une variable spéciale pour stocker de l'hexa (et confond alors représentation et valeur). Je lui ai laissé le bénéfice du doute :p

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention - 26 janv. 2012 à 15:28
0
Merci
En gros je veux que l'utilisateur puisse entrer une trame du genre 01 03 00 45 01 85 DE
que cette chaine soit stocké dans un tableau pour etre envoyer par la suite sur une liaison RS232.
Mon soucis est que une fois que l'utilisateur entre ces valeurs, l'ordi considère que ce sont des caractères donc par exemple il transforme DE en hexa alors que je veux qu'il est considère directement cette chaine comme des valeurs Hexa. Je sais pas si j'arrive a me faire comprendre je suis amateur donc je m'en excuse d'avance ^^.
Si vous avez un exemple a me proposer je suis prenneur.
Merci pour ces réponses si rapide.
Commenter la réponse de virtuoze
BunoCS 14176 Messages postés lundi 11 juillet 2005Date d'inscription 19 octobre 2018 Dernière intervention - 26 janv. 2012 à 17:48
0
Merci
Hello,
Si tu veux saisir le caractère "X" pour le transformer en valeur hexa x, une simple soustraction suffit:
- si c'est un chiffre
char charSaisi;
// saisie du caractère. Par exemple "0" (représentation décimale = 48)
// ..
char valeurHexa charSaisi - 48; // 48-48 0, donc 0 en hexa

- si c'est une lettre
// Cas Majuscule
char charSaisi;
// saisie du caractère. Par exemple "A" (représentation décimale = 65)
// ..
char valeurHexa charSaisi - 55; // 65-55 10, donc A en hexa

// cas Miniscule, si besoin
// idem mais 87 à soustraire


Pour t'en convaincre, regardes une table ASCII
@+
Buno, Admin CS
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Commenter la réponse de BunoCS
virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention - 27 janv. 2012 à 12:06
0
Merci
Merci à vous pour votre aide.
Pingu tu ma bien eclairé et je pense avoir compris , je vais continuer à coder ca et je reposterais ici si j'ai un autre problème car en tant que amateur je pense que ce projet va me posé des soucis.
MERCI a toi aussi Bruno pour ton aide
Commenter la réponse de virtuoze
cptpingu 3827 Messages postés dimanche 12 décembre 2004Date d'inscription 6 octobre 2018 Dernière intervention - 27 janv. 2012 à 13:05
0
Merci
Noublie pas de valider la réponse, si elle te convient :).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention - 30 janv. 2012 à 09:23
0
Merci
Ba en faite avant de valider j'ai un autre probleme sur mon programme et vue que que c'est sur le meme programme que celui sur lequel j'ai eu mon probleme de chaine en hexa je ne sais pas si je dois valider ou je Peux poser ma question dessuite apres sachant que cette fois si c'est un probleme avec la structure TIMEOUT.
Je ne comprend pas à quoi servent les membres de cette structur:DWORD ReadIntervalTimeout;
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
J'ai regardé sur MSDN mais j'ai vraiment du mal à bien comprendre leur utilisation.
Si je dois valider la réponse avant de poser cette question alors je le referais et je reposterais.

Merci d'avance!
Commenter la réponse de virtuoze
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 30 janv. 2012 à 10:05
0
Merci
après lecture rapide, je dirai :
ton TimeOut, au final

T = ReadTotalTimeoutConstant + ReadIntervalTimeout * ReadTotalTimeoutMultiplier

idem pour le Write



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
virtuoze 7 Messages postés jeudi 26 janvier 2012Date d'inscription 2 février 2012 Dernière intervention - 30 janv. 2012 à 16:01
0
Merci
Mais en faite je comprend comment marche ces varibales car je doit les initialiser.
Commenter la réponse de virtuoze

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.