Conversion d'entier en base 2^32 vers base 10

le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009 - 22 août 2008 à 14:32
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009 - 31 août 2008 à 12:54
Bonjour !
Je chercher je cherche, mais je ne trouve pas d'idée.
Dans le cadre de l'implémentation d'une classe de grands entiers, je souhaite pouvoir convertir un nombre exprimé en base 2^32 vers la base 10 (pour l'affichage). Cependant je ne sais pas comment procéder. Etant donné la taille des nombres les méthodes habituelles de conversion de bases ne peuvent être utilisées.

J'ai pensé convertir mes termes a*(2^32)^k séparément selon les indices k et ensuite additionner les résultats.
J'ai commencé ma conversion par le calcul de (a*(2^32)^k)%10 = ((a%10)*(2^32%10)^k)%10
Cependant, après ce premier calcul je ne vois pas comment manipuler ce qui reste lorsque k est relativement grand...
Duchon.

10 réponses

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
22 août 2008 à 14:53
Salut,

En base 2^32 ?
En base 2 ou 32 ?
 passage de la base 2 à 10 :

int octet1_bin1 = (reponse.alt[0] & 0x1)  >> 0;
int octet1_bin2 = (reponse.alt[0] & 0x2)  >> 1;
int octet1_bin3 = (reponse.alt[0] & 0x4)  >> 2;
int octet1_bin4 = (reponse.alt[0] & 0x8)  >> 3;
int octet1_bin5 = (reponse.alt[0] & 0x16) >> 4;
int octet1_bin6 = (reponse.alt[0] & 0x32) >> 5;
int octet1_bin7 = (reponse.alt[0] & 0x64) >> 6;
int octet1_bin8 = (reponse.alt[0] & 0x128)>> 7;

int octet2_bin1 = (reponse.alt[1] & 0x1)  >> 0;
int octet2_bin2 = (reponse.alt[1] & 0x2)  >> 1;
int octet2_bin3 = (reponse.alt[1] & 0x4)  >> 2;
int octet2_bin4 = (reponse.alt[1] & 0x8)  >> 3;
int octet2_bin5 = (reponse.alt[1] & 0x16) >> 4;
int octet2_bin6 = (reponse.alt[1] & 0x32) >> 5;
int octet2_bin7 = (reponse.alt[1] & 0x64) >> 6;
int octet2_bin8 = (reponse.alt[1] & 0x128)>> 8;

int Altitude;
Altitude = octet1_bin8  * 32768;
Altitude += octet1_bin7 * 16384;
Altitude += octet1_bin6 * 8192;
Altitude += octet1_bin5 * 4096;
Altitude += octet1_bin4 * 2048;
Altitude += octet1_bin3 * 1024;
Altitude += octet1_bin2 * 512;
Altitude += octet1_bin1 * 256;

Altitude += octet2_bin8 * 128;
Altitude += octet2_bin7 * 64;
Altitude += octet2_bin6 * 32;
Altitude += octet2_bin5 * 16;
Altitude += octet2_bin4 * 8;
Altitude += octet2_bin3 * 4;
Altitude += octet2_bin2 * 2;
Altitude += octet2_bin1 * 1;

pour un passage de base 32 vers 10, il te faut remplacer les puissance de 2
par les puissances de 32...

Cordialement,
Sébastien.
0
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
22 août 2008 à 15:03
J'ai bien écrit de base 2^32 à base 10...
Donc pour faire clair: de base 4294967296 à base 10.

Duchon.
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
22 août 2008 à 17:01
RE,

Alors tu changes les puissance en base 2 par les puissance en base 2^32..

Cordialement,
Sébastien.
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
22 août 2008 à 17:01
RE,

Alors tu changes les puissance en base 2 par les puissance en base 2^32..

Cordialement,
Sébastien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
22 août 2008 à 17:51
T'es gentil, mais pour info mon processeur gère pas les entiers de 256 Mo
Le problème vient bien du fait que je travaille avec des entiers pouvant aller jusqu'à 2^16 bits, et que les calculs standards ne sont pas possibles...

Duchon.
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
24 août 2008 à 11:21
Salut,

Si je ne me trompe pas, si ton entier est codé en base 2^32,
il est toujours codé sur 32 bit ( 4 octets) pour un processeur 32 bits.
Pour moi ça ne change rien puisque tu as une représentation de tes entiers
dans la mémoire de l'ordinateur.

Mais si tu n'arrive pas a effectuer les calcul que tu souhaites,
comme la conversion en base 10 utilises un langage de plus
haut niveau comme le langage LISP.

Sébastien.
0
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
24 août 2008 à 13:19
Et comment tu demandes au processeur de calculer (2^32)^128 quand t'arrives au bit 32*128 de mon nombre ???
Non mais franchement, t'as compris pourquoi il y a un problème avec les grands nombres au moins ?

Et t'as déjà vu la lenteur de lisp ? Pas très efficace pour la cryptographie !
Duchon.
0
SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
24 août 2008 à 16:34
Re,

Lenteur de LISP ?
les fonction sont compilées maintenant, souvent bien plus efficace que du C++ !
Sinon oui j'ai compris le problème des grand nombre, c'est pour ça qu'on travail sur
leur représentation.Et puis qui dit cryptographie, dit mathématique, dit matlab, scilab voir lisp...
(Pour info je viens de tester des manipulation de nombre de la taille de ceux que tu manipule en LISP)

Cordialement,
Sébastien.
0
mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
31 août 2008 à 11:50
"Lenteur de LISP ?
les fonction sont compilées maintenant, souvent bien plus efficace que du C++ !" On dit que j'ai rien vu!!

sinon pout ton probleme il existe une lib de grand nombre GMP http://gmplib.org/
0
le_duche Messages postés 159 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 26 février 2009
31 août 2008 à 12:54
Sache déjà qu'en cryptographie on utilise pas de programme avec Garbage Collector, ca permet des attaques bien trop faciles...

Duchon.
0
Rejoignez-nous