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 originalunion test
{
unsigned long varLong;
unsigned char varChar[8];
};
union test test;
test.varLong = 10108;
printf("%.*s", 8, test.
varChar);
opción 2:
Código C:
Ver originalunsigned long var = 10108;
unsigned char* varChar = (unsigned char*)&var;
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 originalunion test
{
unsigned long varLong;
unsigned short varChar[4];
};
Un saludo