Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: t4r0x en 5 Abril 2014, 09:13 am



Título: Convertir std::string a valor entero?
Publicado por: t4r0x en 5 Abril 2014, 09:13 am
Buenas podria alguien decirme como convertir un std::string a un valor entero
el mayor problema que tengo es que la std::string podria tener un valor en representacion de varias bases numericas (10,16) entonces stoi no me funciona ya que me pide la base numerica que no se cual es. alguna solucion? muchas gracias


Título: Re: Convertir std::string a valor entero?
Publicado por: ivancea96 en 5 Abril 2014, 10:11 am
Tú tienes que saber a que base la quieres pasar. El número "123" puede estar en infinitas bases numéricas. Desde la base 4 a infinito.
Tienes que saber tú que base es.
Si tu pregunta es cómo saber la base mínima, sería simplemente mirar cuál es la letra o número más grande.


Título: Re: Convertir std::string a valor entero?
Publicado por: amchacon en 5 Abril 2014, 12:17 pm
Si no sabes la base númerica, el problema es irresoluble.


Título: Re: Convertir std::string a valor entero?
Publicado por: t4r0x en 5 Abril 2014, 23:23 pm
Ese es el problema el usuario puede ingresar tanto un valor hexadecimal o un entero base 10, entonces existe alguna funcion que pueda determinar el tipo de base de una cadena?


Título: Re: Convertir std::string a valor entero?
Publicado por: ivancea96 en 5 Abril 2014, 23:31 pm
Vamos a ver. Un programa tiene una finalidad. El usuario no decide, decides tú.

¿Para qué es el valor que ingresa el usuario?
¿Va a ingresarlo con 0x## en caso de ser hexadecimal?


Título: Re: Convertir std::string a valor entero?
Publicado por: t4r0x en 6 Abril 2014, 00:25 am
Bueno entonces decido que mi programa pueda determinar el tipo de valor numerico
incluso si es valido o no, solo me gustaria saber si existe una clase o funcion en C/C++
para determinar la base numerica de un valor por favor podrian contestar algo concreto a lo que busco? no quiero volver a crear el tema


Título: Re: Convertir std::string a valor entero?
Publicado por: amchacon en 6 Abril 2014, 00:31 am
Lo que se puede hacer es forzar a que el número cumpla una sintaxis específica. En C++ se usa este metodo:
Código
  1. int a = 12; // 12 en base 10
  2. int b = 0x12; // 12 en base 16

Cuando se pone 0x es base 16, y sin el es base 10.


Título: Re: Convertir std::string a valor entero?
Publicado por: t4r0x en 6 Abril 2014, 00:40 am
No, yo tengo una std::string que contiene un valor entero ingresado por el usuario este puede ser en base 16 o base 10. por ejemplo:

base 16:
"0x2038483","0x9832874","0x87473A", etc


base 10:
"2873948","9849380","28439",etc

tengo una std::string lo quiero convertir a una variable entero (unsigned long).
stoi esta bien, pero me pide el tipo de base a convertir y queria saber si existe alguna
funcion C/C++ que pueda determinarlo automaticamente o existe una funcion solo para tal proposito y luego usar stoi, creo que hoy si he sido bastante claro, gracias.


Título: Re: Convertir std::string a valor entero?
Publicado por: ivancea96 en 6 Abril 2014, 01:32 am
Código
  1. if(s.substr(0,2)=="0x") /*Es Hexadecimal*/


Título: Re: Convertir std::string a valor entero?
Publicado por: rir3760 en 6 Abril 2014, 02:45 am
tengo una std::string que contiene un valor entero ingresado por el usuario este puede ser en base 16 o base 10. por ejemplo:

base 16:
"0x2038483","0x9832874","0x87473A", etc

base 10:
"2873948","9849380","28439",etc

tengo una std::string lo quiero convertir a una variable entero (unsigned long).
stoi esta bien, pero me pide el tipo de base a convertir y queria saber si existe alguna
Puedes utilizar la función strtol (http://www.cplusplus.com/reference/cstdlib/strtol/) indicando en la llamada que la base es cero. Con ello la base se decide en base a los caracteres iniciales (revisa el ejemplo en la pagina que indique).

Un saludo


Título: Re: Convertir std::string a valor entero?
Publicado por: t4r0x en 6 Abril 2014, 08:46 am
Puedes utilizar la función strtol (http://www.cplusplus.com/reference/cstdlib/strtol/) indicando en la llamada que la base es cero. Con ello la base se decide en base a los caracteres iniciales (revisa el ejemplo en la pagina que indique).

Un saludo
Muchas gracias rir3760 era lo que buscaba!