Coment concatener tois entier sous forme hexa ?

Coment concatener tois entier sous forme hexa ? - Ada - Programmation

Marsh Posté le 12-08-2009 à 12:16:00    

Bonjour,
Je doit ecrire une fonction traduisant l'effet d'une macro C donnant un entier en concatenant  trois hexa.
 
Mon problème est de trouver comment obtenit une représentation hexa avec Ada, pas trouvé :/
 
Merci pour votre aide.   :jap:


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 12:16:00   

Reply

Marsh Posté le 12-08-2009 à 14:28:05    

Donc, je disais... Que j'avais réussi à convertir un base 10 en base 16... Avec le code ci-dessous...

Code :
  1. function Hex_Image(Num : Integer) return String is
  2.      Image : String(1..9);
  3.      Last  : Positive := 9;
  4.      Number : Integer := num;
  5.      type Hexa_Digit is
  6.        ('0', '1', '2', '3', '4', '5', '6', '7',
  7.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  8.  
  9.      Rest : Integer;
  10.   begin
  11.      while (Number rem 16) /= 0 loop
  12.  
  13.         Rest := (Number rem 16);
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((rest))));
  15.         number := Number - rest;
  16.  
  17.         Last := Last - 1;
  18.  
  19.      end loop;
  20.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number/16)));
  21.      return Image(Last..Image'length);
  22.   end Hex_Image;


 
La concatenation, bon, je donne pas de cours....
 
Par contre maintenant, je doit retrouver l'entier correspondant à la chaîne de trois hexa concatené.
 
J'ai donc une chaîne de caractères exprimant un nombre en base 16 et je veux un type entier long en base 10.
 
Et la question est, comment procéder... Comme d'hab, le premier sera le premier.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 15:07:42    

Hep !
 
 
Pour l'instant, je n'ai rien trouvé de mieux que d'écrire la chaîne dans un fichier en l'encadrant par "16#" et '#' et de relire. Ca marche.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Marsh Posté le 12-08-2009 à 15:15:34    

The matrix a écrit :

Par contre maintenant, je doit retrouver l'entier correspondant à la chaîne de trois hexa concatené.
J'ai donc une chaîne de caractères exprimant un nombre en base 16 et je veux un type entier long en base 10.
Et la question est, comment procéder... Comme d'hab, le premier sera le premier.


Ca me parait pas trop difficile en théorie après en ADA j'en sais rien du tout mais tu lis ton nombre hexa caractère par caractère, tu transforme chacun en nombre (1->1 , ... , A -> 10, ... F->15) et tu fais la somme des produits de chaque nombre avec 16^position du caractère. Sachant que le caractère tout à droite est à la position 0.

 

Je sais pas si ça répond à ton problème.

Message cité 1 fois
Message édité par Deamon le 12-08-2009 à 15:16:15
Reply

Marsh Posté le 12-08-2009 à 15:24:29    

Deamon a écrit :


Ca me parait pas trop difficile en théorie après en ADA j'en sais rien du tout mais tu lis ton nombre hexa caractère par caractère, tu transforme chacun en nombre (1->1 , ... , A -> 10, ... F->15) et tu fais la somme des produits de chaque nombre avec 16^position du caractère. Sachant que le caractère tout à droite est à la position 0.
 
Je sais pas si ça répond à ton problème.


 
Ok, merci, donc reconvertir...
 
 
 
Pour le code ci-dessus, il n'est pas exacte ... voici la correction.
 

Code :
  1. function Hex_Image(Num : Integer) return String is
  2.      Image : String(1..9);
  3.      Last  : Positive := 9;
  4.      Number : Integer := num;
  5.      type Hexa_Digit is
  6.        ('0', '1', '2', '3', '4', '5', '6', '7',
  7.         '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
  8.  
  9.      Rest : Integer;
  10.   begin
  11.      loop
  12.  
  13.         Rest := (Number rem 16);
  14.         image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val((Rest))));
  15.         number := Number - rest;
  16.  
  17.         Last := Last - 1;
  18.         exit when (Number rem 16) = 0;
  19.      end loop;
  20.      image(Last) := Character'Value(Hexa_Digit'image(Hexa_Digit'val(Number/16)));
  21.      return Image(Last..Image'length);
  22.   end Hex_Image;


 
 
J'ai terminé de se côté ci.


---------------
des gestes simples et ponctués, par quelques points presque importants, la précision coordonnée, d'une île déserte, des plans secrets, d'un architecte, à la retraite, passionné par son métier, refaire le monde, à son idée, tracer des routes, les emprunter
Reply

Sujets relatifs:

Leave a Replay

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