Convertir std::string a valor entero?

Iniciado por t4r0x, 5 Abril 2014, 09:13 AM

0 Miembros y 1 Visitante están viendo este tema.

t4r0x

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

ivancea96

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.

amchacon

Si no sabes la base númerica, el problema es irresoluble.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

t4r0x

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?

ivancea96

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?

t4r0x

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

amchacon

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 (cpp) [Seleccionar]
int a = 12; // 12 en base 10
int b = 0x12; // 12 en base 16


Cuando se pone 0x es base 16, y sin el es base 10.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

t4r0x

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.

ivancea96

Código (cpp) [Seleccionar]
if(s.substr(0,2)=="0x") /*Es Hexadecimal*/

rir3760

Cita de: t4r0x en  6 Abril 2014, 00:40 AMtengo 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 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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language