Error muy extraño con SSCANF

Iniciado por El_programata, 24 Febrero 2016, 17:15 PM

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

El_programata

Hola buenos días, tengo un código que funciona perfectamente excepto en unos casos en concreto.

Tengo una variable tipo int llamada code y otra variable string llamada lenconte.

Hal hacer el cast de esta manera:

sscanf(lenconte,"%x", &code);

Todo funciona correctamente ....excepto que code solamente capta los 8 últimos digitos de lenconte y para números muy largos se me secciona.

Alguna idea?

Gracias.

MAFUS

Debes recordar que  los números son finitos y hay un máximo valor para cada tipo. 16 dígitos en hexadecimal ya es hablar de un número muy muy grande.
Deberías pensar en usar una librería para manejar este tipo de números o manejarlos por ti mismo.

El_programata

Cita de: MAFUS en 24 Febrero 2016, 17:24 PM
Debes recordar que  los números son finitos y hay un máximo valor para cada tipo. 16 dígitos en hexadecimal ya es hablar de un número muy muy grande.
Deberías pensar en usar una librería para manejar este tipo de números o manejarlos por ti mismo.

Edito el mensaje principal, ya que no son 16 sino 8. Aunque es cierto que siguen siendo números muy grandes. He probado a trabajar con %lx y %llx en el cast pero sigue admitiendo unicamente estos 8 digitos. No se si se me escapa algun concepto, llevo poco programando. A ver si a alguien se le ocurre algo, yo sigo investigando lo que dices de las librerías.

Muchas gracias :)

MAFUS

Dices que lo guardas en un int.
Cambia la variable a long, tendrás el doble de tamaño. Y si no vas a usar números negativos usa unsigned long.

furciorifa

Tú error está en que estas asignando %x como Hexadecimal

te recuerdo que hay una variación de 0 1 2 3 4 5 6 7 8 9 A B C D E F numeros en Hexa es decir 16 como su nombre lo dice, al almacenar más de 8 dígitos estamos hablando de 16^8 que es un 1GB así que ten cuidado.

MAFUS

furciorifa, esa cuenta está mal.

Los valores hexadecimales representan 4 bits, poner dos juntos es un byte en la memoria del ordenador.

Por tanto si el ordenador le acepta un númeri de 16 hexadecimales lo que está es trabajando con un dato de 64 bits.