Conversion d'un nombre entier dans une base quelconque

Description

Convertir un entier dans la base indiquée, ou bien lire un entier écrit dans la base connue, ce petit programme en C++ effectue cela avec des bases choisies entre 2 et 62. Il est bien évident qu'on peut aussi très facilement programmer diverses variantes du code source. L'image int2base.jpg incluse dans le zip en montre l'utilisation obtenue avec le fichier main.cpp joint.

Source :

#include <iostream>
#include <cstdint>
#include <string>
    
// Inversion d'une std::string
void reverseStr(std::string& str) {
    int n = str.length();
    for (int i = 0; i < n / 2; i++)
        std::swap(str[i], str[n-i-1]);
}
    
// Conversion en std::string d'un nombre entier en base b 
std::string int2base(int64_t x, int b) {
    std::string ch = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int s;
    if(x < 0) s = -1;
    else if(x == 0) return "0";
    else s = 1;
    x = s*x;
    std::string str;
    while(x > 0) {
        str = str + ch[x % b];
        x = x / b;
    }
    if(s < 0) str = str + "-"; 
    reverseStr(str);
    return str;
}
    
// Calcul d'un nombre entier écrit en base b
int64_t str2int(std::string str, int b) {
    std::string ch = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // str[0] est le signe '-' ou le 1-er chiffre et str[ni] le dernier chiffre.
    int s = 1;
    if(str[0] == '-') {
        s = -1;
        str = str.substr(1);
    }
    int64_t n = 0, bi = 1;
    int ni = str.size()-1;
    for(int i=ni; i >= 0; i--) {
        int k = -1;
        for(int j=0; j < b; j++) if(str[i] == ch[j]) {k=j; break;}
        if(k == -1) {std::cout << "Erreur dans str2int()" << std::endl; return 0;}
        n = n + k * bi;
        bi = bi * b;
    }
    return s*n;
}

Codes Sources

A voir également

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.