web-dev-qa-db-fra.com

Conversion de hexadécimal en décimal

Je cherche un moyen de convertir hex(hexadécimal) à dec(décimal) facilement. J'ai trouvé un moyen facile de faire cela comme:

int k = 0x265;
cout << k << endl;

Mais avec ça, je ne peux pas entrer 265. Y a-t-il un moyen pour que cela fonctionne comme ça:

Entrée: 265

Sortie: 613

Y'a-t'il un quelconque moyen d'y arriver ?

Note: J'ai essayé: 

int k = 0x, b;
cin >> b;
cout << k + b << endl;

et ça ne marche pas.

8
zeulb
#include <iostream>
#include <iomanip>

int main()
{
    int x, y;
    std::stringstream stream;

    std::cin >> x;
    stream << x;
    stream >> std::hex >> y;
    std::cout << y;

    return 0;
}
19
smichak

Utilisez std::hex manipulator:

#include <iostream>
#include <iomanip>

int main()
{
    int x;
    std::cin >> std::hex >> x;
    std::cout << x << std::endl;

    return 0;
}
11
hmjd

Eh bien, la voie C pourrait être quelque chose comme ...

#include <stdlib.h>
#include <stdio.h>

int main()
{
        int n;
        scanf("%d", &n);
        printf("%X", n);

        exit(0);
}
5
stefanl

Voici une solution utilisant des chaînes et la convertissant en décimal avec les tables ASCII:

#include <iostream>
#include <string>
#include "math.h"
using namespace std;
unsigned long hex2dec(string hex)
{
    unsigned long result = 0;
    for (int i=0; i<hex.length(); i++) {
        if (hex[i]>=48 && hex[i]<=57)
        {
            result += (hex[i]-48)*pow(16,hex.length()-i-1);
        } else if (hex[i]>=65 && hex[i]<=70) {
            result += (hex[i]-55)*pow(16,hex.length( )-i-1);
        } else if (hex[i]>=97 && hex[i]<=102) {
            result += (hex[i]-87)*pow(16,hex.length()-i-1);
        }
    }
    return result;
}

int main(int argc, const char * argv[]) {
    string hex_str;
    cin >> hex_str;
    cout << hex2dec(hex_str) << endl;
    return 0;
}
4
Christos
    std::cout << "Enter decimal number: " ;
    std::cin >> input ;

    std::cout << "0x" << std::hex << input << '\n' ;

si vous ajoutez une entrée qui peut être un booléen, un float ou un int, elle sera renvoyée dans l'appel de la fonction main int ...

Avec les modèles de fonction, basés sur des types d'argument, C génère des fonctions distinctes pour gérer chaque type d'appel de manière appropriée. Toutes les définitions de modèle de fonction commencent par le modèle de mot-clé suivi par les arguments entre crochets <et>. Un seul paramètre formel T est utilisé pour le type de données à tester. 

Considérez le programme suivant où l'utilisateur est invité à entrer un entier, puis un float, chacun utilise la fonction carrée pour déterminer le carré . Avec des modèles de fonction, basés sur des types d'argument, C génère des fonctions séparées pour gérer chaque type d'appel. de manière appropriée. Toutes les définitions de modèle de fonction commencent par le modèle de mot-clé suivi par les arguments entre crochets <et>. Un seul paramètre formel T est utilisé pour le type de données à tester. 

Considérez le programme suivant où l'utilisateur est invité à entrer un entier, puis un float, chacun utilisant la fonction carrée pour déterminer le carré.

#include <iostream>
 using namespace std;
template <class T>      // function template
T square(T);    /* returns a value of type T and accepts                  type T     (int or float or whatever) */
  void main()
{
int x, y;
float w, z;
cout << "Enter a integer:  ";
cin >> x;
y = square(x);
cout << "The square of that number is:  " << y << endl;
cout << "Enter a float:  ";
cin >> w;
z = square(w);
cout << "The square of that number is:  " << z << endl;
}

template <class T>      // function template
T square(T u) //accepts a parameter u of type T (int or float)
{
return u * u;
}

Here is the output:

Enter a integer:  5
The square of that number is:  25
Enter a float:  5.3
The square of that number is:  28.09
1
101dolmations

J'utilise ceci:

template <typename T>
bool fromHex(const std::string& hexValue, T& result)
{
    std::stringstream ss;
    ss << std::hex << hexValue;
    ss >> result;

    return !ss.fail();
}
0
dimon4eg