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.

War es hilfreich?

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
scroll top