Wie vier unsigned short int von einem long long int zu extrahieren?
-
02-07-2019 - |
Frage
Angenommen, ich eine lange, lange int haben und wollen ihre Bits nehmen und aus ihm vier unsigned short ints zu konstruieren.
Besondere Reihenfolge spielt keine große Rolle hier.
Ich weiß, dass ich im Allgemeinen Bits verschieben muß und auf die Größe von unsigned short int gestutzt. Aber ich denke, ich kann einige seltsame Fehler irgendwo machen, so frage ich.
Lösung
#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;
}
Andere Tipps
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
wo value
ist Ihre long long int
und x
0, 16, 32 oder 48 für die vier Shorts.
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
Das sollte das tun, was Sie denken, ohne um mit Bitverschiebung zu Chaos mit.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow