Título: Problema con strtol Publicado por: t4r0x en 15 Abril 2014, 08:06 am Hola queria saber si alguien sabe porque el valor devuelto por strtol es incorrecto:
string test = "0xC0000040"; unsigned long TDword = strtol(test.c_str(),0,0); El valor devuelto es 0x7FFFFFFF y no 0xC0000040. Título: Re: Problema con strtol Publicado por: x64core en 15 Abril 2014, 09:00 am Hola queria saber si alguien sabe porque el valor devuelto por strtol es incorrecto: string test = "0xC0000040"; unsigned long TDword = strtol(test.c_str(),0,0); El valor devuelto es 0x7FFFFFFF y no 0xC0000040. strtol para valores con signo, usa strtoul. Título: Re: Problema con strtol Publicado por: eferion en 15 Abril 2014, 09:01 am * A la hora de escribir código, usa las etiquetas GeSHi, gracias *
Citar If the value read is out of the range of representable values by a long int, the function returns LONG_MAX or LONG_MIN (defined in <climits>), and errno is set to ERANGE. Dicho en cristiano... si el valor a traducir está fuera de rango, la función devolverá LONG_MAX o LONG_MIN dependiendo de si te has pasado por arriba o por abajo. En tu caso el valor devuelto es LONG_MAX. El por qué es sencillo. Long son 32 bits, reservando uno para el signo. El bit de signo es el primero empezando por la izquierda. Si convertimos tu cifra a binario queda: Código: C 0 0 0 0 0 4 0 El primer bit por la izquierda es uno, es decir, estaría representando a un número negativo... dado que el valor lo has dado en hexadecimal, representando un número positivo, no es posible realizar la conversión... convertir un número positivo en uno negativo no suele quedar bien. Dado que el número en hexadecimal es positivo, la función te devuelve LONG_MAX. Si cambias esa C por, como mucho, un 7, la función te devolverá el valor esperado. |