5 codes ascii dans un int (2.147.483.648)

5 codes ascii dans un int (2.147.483.648) - Algo - Programmation

Marsh Posté le 06-06-2003 à 13:08:18    

Voila je dois changer un bout de programme assez complexe et je vais donc peut etre devoir passer au bricolage...  
j'ai 5 caracteres alpha numérique code ascii de 30-39 pour les nbres et de 65-90 pour les lettres maj.
Et je dois les mettres dans un int cad un nombre compris entre  
+-2.147.483.648  
 
Est ce que qq aurais une idée de procédure simple?
 
D'avance merci

Reply

Marsh Posté le 06-06-2003 à 13:08:18   

Reply

Marsh Posté le 06-06-2003 à 13:10:26    

c'est pas possible code ascii 7bits => 7*5==35, et comme tes int sont sur 32bits, ça coince...
et si tu veux du 8bits, ben la tu peux tout juste en mettre 4
 
sinon la technique c'est avec des masques et des décalage binaire

Reply

Marsh Posté le 06-06-2003 à 13:13:17    

oui mais comme je n ai besoin que les chifre de 0-9 t les caracteres de A-Z pe peut on trouver qq ch non?

Reply

Marsh Posté le 06-06-2003 à 13:17:34    

ben alors pas des codes ascci
t'as qu'à faire [0-9] => chiffre [0 ; 9]  
[10-35] -> ['a' ; 'z'];
 
à ce moment la il te faut 6 bits
 apres tu utilise un masque avec les opéateurs &, |, ^

Reply

Marsh Posté le 06-06-2003 à 14:52:45    

et en plus, si tu veux mettre les majuscules, ca te fait 61 caractères, donc ca tient encore sur 6 bits .... La fête !


---------------
last.fm
Reply

Marsh Posté le 06-06-2003 à 16:46:11    

y a t il moyen de faire une sous routine asm en java?

Reply

Marsh Posté le 06-06-2003 à 16:46:59    

avec JNI

Reply

Marsh Posté le 06-06-2003 à 16:48:55    

cad c quoi JNI?

Reply

Marsh Posté le 06-06-2003 à 23:29:17    

The big ben a écrit :

cad c quoi JNI?


 
Pourquoi faire de l'ASM dans du Java ? Tu as des opérateurs 'bitwise' en Java aussi ...
 
A moins que tu ne souhaites faire des optimisations monstrueuses, pour un exo aussi trivial, ce sera encore plus simple de rester avec du Java ...
 
JNI, c'est Java Native Interface, si je ne me trompe pas ... Ca te permet de faire du code natif (du point de vue du système) donc moins portable que le Java en lui-même ...


---------------
last.fm
Reply

Marsh Posté le 06-06-2003 à 23:40:04    

++Taz a écrit :

ben alors pas des codes ascci
t'as qu'à faire [0-9] => chiffre [0 ; 9]  
[10-35] -> ['a' ; 'z'];
 
à ce moment la il te faut 6 bits
 apres tu utilise un masque avec les opéateurs &, |, ^


En stockant même comme ça :
 
0-35
36-71
72-108
...
 
Y'a moyen d'en stocker une tétachiée de caractères :)
 
Par contre, faudra faire pas mal de calculs pour les relire :)
 
Quoiqu'en bossant en base 36, doit y avoir moyen de les relire très simplement.


Message édité par MagicBuzz le 06-06-2003 à 23:40:44
Reply

Marsh Posté le 06-06-2003 à 23:40:04   

Reply

Marsh Posté le 07-06-2003 à 00:55:58    

Prends tes nombres et tes lettres, vire les 2bits de poids fort et tu va voir ca marche.

Reply

Marsh Posté le 24-06-2003 à 22:45:17    

Code en C#, adapte dans le langage que tu veux après ;)
 

  byte[]  tab = new byte[4];
   int mesBytes = 1236826554;
 
   for (int i = 0; i <= tab.GetUpperBound(0); i++)
   {
    tab[i] = System.Convert.ToByte((mesBytes / System.Convert.ToInt32(System.Math.Pow(256, i))) % 256);
   }


 
PS: Testé, et ça marche ;)
 
Ce système évite de faire des offset et des masques qui sont pas forcément supportés sur les langages de haut niveau (en C# je crois pas que ça existe ;)) Mais ça revient rigoureusement au même.


Message édité par MagicBuzz le 24-06-2003 à 22:47:00
Reply

Sujets relatifs:

Leave a Replay

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