Come estrarre quattro short short senza segno da un int long long?
-
02-07-2019 - |
Domanda
Supponiamo che io abbia un int long long e che voglia prendere i suoi bit e costruirne quattro brevi short senza segno.
L'ordine particolare non ha molta importanza qui.
In genere so che devo spostare bit e troncare alla dimensione di int senza segno corto. Ma penso di poter fare qualche strano errore da qualche parte, quindi chiedo.
Soluzione
#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;
}
Altri suggerimenti
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
dove value
è il tuo long long int
e x
è 0, 16, 32 o 48 per i quattro cortometraggi.
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
Questo dovrebbe fare ciò a cui stai pensando, senza dover fare confusione con il cambio di bit.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow