conversion hexa -> Decimal

conversion hexa -> Decimal - C++ - Programmation

Marsh Posté le 28-02-2003 à 17:08:42    

Bonjour tous le monde !!
J'ai un petit gros probleme que j'arrive pas a voir, ca doit etre surement simple mais je dois avouer que je bloque. Alors voila les faits. En faite j'ai une chaine de caractere de 18 chiffres hexadecimaux dont les 6 premiers chiffres correspondent a une valeur, les 6 autres egalement  et les derniers 6 aussi donc pour resumer :
ex : 000010002000FFFFFE
       |  A    |  B    |   C  
A: hexadecimale en complement binaire, dans l'exemple la valeur 16 décimale
B: hexadecimale en complement binaire, dans l'exemple la valeur 8096 décimale
C: hexadecimale en complement binaire, dans l'exemple la valeur -2 décimale.
 
Je souhaites obtenir 3 variables a partir de ma chaine de caractere de depart dont les contenus correspondent a la valeur decimale de A,B et C. Donc A=16, B=8096 et C=-2.
Si quelqu'un pouvait m'aider ca serait bien aimable de ca part car je vois pas tellement comment faire :'(


Message édité par jarod2000 le 28-02-2003 à 17:11:29
Reply

Marsh Posté le 28-02-2003 à 17:08:42   

Reply

Marsh Posté le 28-02-2003 à 17:23:34    

ben dja tu tronques ta chaine. non ?
bon apres ... t'as pas d'idee ?


---------------
get amaroK plugin
Reply

Marsh Posté le 28-02-2003 à 17:33:43    

Ouep je me retrouves avec 3 CString avec 000010 dans la 1er 002000 dans la seconde et FFFFFE dans la 3ieme. Maitenant je veux transformer le contenu de ces chaines en leur valeur decimale mais c vrai que je vois pas du tout, mdr c'est si simple que ça ?? j'ai regarder dans les class members de CString et je vois pas trop si ya une fonction que je peux utiliser, peut etre la fonction FORMAT, mais bon pour repondre a ta question .... non j'ai pas d'idée :'(.

Reply

Marsh Posté le 28-02-2003 à 17:48:57    

tu peux appliquer le schema de Horner...mais il y a peut etre quelque chose dans la classe String pour faire ca...

Reply

Marsh Posté le 28-02-2003 à 17:59:39    

je penses qu'il vas falloir que je developpe dans ma metode toute une procedure pour pouvoir convertir ca mais comme tu dis djok_fb ya surement une methode qui permet cela directement et justement c'est ce que je voudrais savoir, donc si quelqu'un voit qui n'hesite pas a me faire signe ;) ca serait sympa de sa part. Encore merci.

Reply

Marsh Posté le 28-02-2003 à 18:01:32    

CString.Format("%d" )

Reply

Marsh Posté le 28-02-2003 à 18:13:16    

Citation :


 CString Test="000010";
 Test.Format("%d" );
 cout << Test;


 
Test different de ce que je devrais avoir ( 16 ) :'(

Reply

Marsh Posté le 28-02-2003 à 22:29:55    

La méthode "universelle" consiste à multiplier chaque valeur de la base par la puissance de l'indice. :D  
 
abcdef en base 16 se calcule par f * (16 à la puiss zéro) + e * (16 à la puiss 1) + d * (16 à la puiss 2) + ... + a * (16 à la puissance 5).
Si c'était du binaire (ou décimal), ça marche pareil (par définition de la base).
 
Si le digit de gauche est >= 8, négatif si signé, faut voir si besoin de complémenter (il me semble !!!).

Reply

Marsh Posté le 28-02-2003 à 23:43:19    

CARBON_14 a écrit :

La méthode "universelle" consiste à multiplier chaque valeur de la base par la puissance de l'indice. :D  
 
abcdef en base 16 se calcule par f * (16 à la puiss zéro) + e * (16 à la puiss 1) + d * (16 à la puiss 2) + ... + a * (16 à la puissance 5).
Si c'était du binaire (ou décimal), ça marche pareil (par définition de la base).
 
Si le digit de gauche est >= 8, négatif si signé, faut voir si besoin de complémenter (il me semble !!!).


ca c'est le schema de Horner mais développer...
 
si ton chiffre s'ecrit: abcdefg en base x pour le convertir en base 10
 
le calcul se fait comme suit:
(( ( ( ((a*x) + b)*x) + c)*x) + d)*x ....+g
et ainsi de suite du coup quand tu developpe le tout, ca donne ce qu'a dit CARBON_14

Reply

Marsh Posté le 01-03-2003 à 00:13:11    

Je dis peut-être une connerie, mais ça marche pas ça ?
 

Code :
  1. int nbr1, nbr2, nbr3;
  2. sscanf(sz1, "%X", &nbr1);
  3. sscanf(sz2, "%X", &nbr2);
  4. sscanf(sz3, "%X", &nbr3);


Message édité par leneuf22 le 01-03-2003 à 00:14:04
Reply

Marsh Posté le 01-03-2003 à 00:13:11   

Reply

Marsh Posté le 01-03-2003 à 00:45:46    

ok je vous remerci pour cette aide, bon je vais devoir coder tous ca ca vas etre un peu plus compliquer que d'avoir un fonction directe. D'ailleurs si quelqu'un connait une fonction qui fait ca directe ;), celle de Harkonnen apparament marche pas a moins que ce soit moi qui est mal codé. Encore un merci a vous.

Reply

Marsh Posté le 01-03-2003 à 00:52:08    

leneuf22 je te remerci grandement en effet tas soluce marche nickel, désolé j'avais commencer a taper mon post precedent avant que tu mettes le tiens donc j'avais pas encore tas soluce. Un grand merci a vous tous de m'avoir si gentillement aidé.
 

Reply

Marsh Posté le 23-03-2003 à 02:29:26    

On peut grouper la lecture:

Code :
  1. const char* s= "000010002000FFFFFE";
  2. int a, b, c;
  3. sscanf(s, "%6x%6x%6x", &a, &b, &c);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed