2012-06-14 22 views
6

Busco una forma de convertir hex(hexadecimal) a dec(decimal) fácilmente. Me encontrado una manera fácil de hacer esto como:hexadecimal la conversión a decimal

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

Pero con eso no puedo 265 de entrada. ¿Hay alguna forma para que funcione de esa manera:

de entrada: 265

Salida: 613

¿Hay alguna forma de hacerlo?

Nota: he intentado:

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

y no funciona.

+0

'printf ("% x ", k)' Supongo – Esailija

+0

Esto no está claro. '0x265' ** es ** 613 en decimal. ¿Que estabas esperando? –

+0

@Esailija, creo que convierte int a hexadecimal en su lugar. – zeulb

Respuesta

13
#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; 
} 
+0

gracias :) esto es lo que estoy buscando: D – zeulb

+12

Why the intermediate stringstream. ¿Por qué no simplemente 'cin >> hex >> y'? –

+2

¿no necesita #include ? – xinthose

9

Uso std::hex manipulador:

#include <iostream> 
#include <iomanip> 

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

    return 0; 
} 
+0

de todos modos para hacer esto sin utilizar la entrada ? porque quiero usar la entrada original para otra cosa – zeulb

+0

@zeulb, no estoy seguro de lo que quiere decir exactamente. Pero reviertes 'cin' para usar decimal por' std :: cin >> std :: dec; ' – hmjd

+0

quiero decir que quiero usar tanto hexadecimal como decimal en dos varibles diferentes – zeulb

5

Bueno, la forma C podría ser algo así como ...

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

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

     exit(0); 
} 
2

que aquí hay una solución utilizando cuerdas y su conversión a decimal con ASCII tablas:

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

utilizo este:

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

    return !ss.fail(); 
} 
0
std::cout << "Enter decimal number: " ; 
    std::cin >> input ; 

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

si su añadir una entrada que puede ser un valor lógico o flotar o INT se pasará de nuevo en el int llamada a la función principal ...

Con plantillas de funciones , basado en tipos de argumentos, C genera funciones separadas para manejar cada tipo de llamada de manera apropiada. Todas las definiciones de plantilla de función comienzan con la plantilla de palabra clave seguida por los argumentos encerrados entre corchetes angulares < y>. Un único parámetro formal T se usa para el tipo de datos que se probarán.

Considere el siguiente programa donde se le pide al usuario que ingrese un número entero y luego un flotador, cada uno usa la función cuadrada para determinar el cuadrado. Con plantillas de funciones, en función de los tipos de argumentos, C genera funciones separadas para manejar cada tipo de llamada de forma adecuada. Todas las definiciones de plantilla de función comienzan con la plantilla de palabra clave seguida por los argumentos encerrados entre corchetes angulares < y>. Un único parámetro formal T se usa para el tipo de datos que se probarán.

Considere el siguiente programa donde se le pide al usuario que ingrese un número entero y luego un flotador, cada uno usa la función cuadrada para determinar el cuadrado.

#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 
Cuestiones relacionadas