Question

Supposons que j’ai un long long int et que je veuille prendre ses bits et en construire quatre innt courts.

L'ordre particulier n'a pas beaucoup d'importance ici.

Je sais généralement que je dois décaler les bits et les tronquer à la taille de unsigned short int. Mais je pense que je peux faire une erreur bizarre quelque part, alors je demande.

Était-ce utile?

La solution

#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;
}

Autres conseils

(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))

valeur est votre long long int , et x est 0, 16, 32 ou 48 pour les quatre courts métrages.

union LongLongIntToThreeUnsignedShorts {
   long long int long_long_int;
   unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};

Cela devrait faire l’objet de vos réflexions, sans avoir à vous soucier du décalage des bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top