¿Cómo extraer cuatro intentos cortos sin firmar de un largo int largo?
-
02-07-2019 - |
Pregunta
Supongamos que tengo una larga int larga y quiero tomar sus bits y construir cuatro ints cortos sin firmar de ella.
El orden particular no importa mucho aquí.
Generalmente sé que necesito cambiar bits y truncar al tamaño de int corto sin signo. Pero creo que puedo cometer algún error extraño en algún lugar, así que pregunto.
Solución
#include <stdint.h>
#include <stdio.h>
union ui64 {
uint64_t one;
uint16_t four[4];
};
int
main()
{
union ui64 number = {0x123456789abcdef0};
printf("%x %x %x %x\n", number.four[0], number.four[1],
number.four[2], number.four[3]);
return 0;
}
Otros consejos
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
donde value
es su long int int
, y x
es 0, 16, 32 o 48 para los cuatro cortos.
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
Eso debería hacer lo que estás pensando, sin tener que perder el tiempo con los cambios de bits.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow