UTNianos

Versión completa: Ayuda con Union? [INFO I]
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Hola, tengo una duda! Busque mucho, en serio, pero no logro entender!
Como es que funciona para que me devuelva esas 2 salidas? Se que union guarda varios datos uno a la vez en un mismo espacio en memoria, pero no entiendo que guarda en el int para luego usarlo con el vector de char. Confused
Hola Alexis.
Probé el código, y lo que me parece que pasa es que te toma el char como entero negativo. Si ponés en el byte más bajo algo de 0x7f para abajo, anda bien. O sea depende del MSb.
Casteá en el printf (unsigned char). O directamente ponelo en la unión, en lugar de "char".
Alexis, coincido con lo que dice Lucho sobre el unsigned char en lugar de char, fíjate lo siguiente:

El byte 1 (MSB) del vector de char, toma el valor 48, que es el esperable para quien lee el resultado.

El byte 0 (LSB) del vector de char, toma el 92, que también sería el esperable, pero acompañado de nibbles "f" hasta completar tu arquitectura (que veo que es de 32 bits). Esto es porque el 92 en hexa equivale a 146 en decimal. Para traducirlo del griego al castellano, hay un overflow del 127 al 146 (19 posiciones, en la tabla pegás la vuelta desde el +127 al -110) hasta llegar al -110. Lo que te indica las "ffffff..." es que el número a representar se excedió de +127 (límite positivo para char).

Por eso te conviene usar vectores de tipo unsigned char, donde el límite positivo es de +255; con la precaución de poner hasta 0x7f (+127), porque 0x80 ya se pasa.

Espero que te haya servido, abrazo!!
URLs de referencia