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;
}