Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/11/2016, 02:23
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: [unsigned long] to [unsigned char]

El tipo char suele ocupar únicamente un byte. Es imposible almacenar 2 bytes en 1 byte. Hay algoritmos de compresión pero no funcionan a esta escala... el resultado de la compresión ocuparía lo mismo o más que el valor original.

Si unsigned long ocupa 8 bytes tendrás que usar una cadena de longitud 8.

Asumiendo entonces una cadena de 8 bytes, para recuperar los bytes individuales puedes hacer algo así:

opción 1:

Código C:
Ver original
  1. union test
  2. {
  3.   unsigned long varLong;
  4.   unsigned char varChar[8];
  5. };
  6.  
  7. union test test;
  8. test.varLong = 10108;
  9. printf("%.*s", 8, test.varChar);

opción 2:

Código C:
Ver original
  1. unsigned long var = 10108;
  2. unsigned char* varChar = (unsigned char*)&var;
  3. printf("%.*s", 8, test.varChar);

Por otro lado, si lo que sigues necesitando es almacenar dos bytes en cada posición del array entonces necesitas que cada posición del array ocupe dos bytes. En este caso tendrías que usar unsigned short en vez de unsigned char:

Código C:
Ver original
  1. union test
  2. {
  3.   unsigned long varLong;
  4.   unsigned short varChar[4];
  5. };

Un saludo
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.