1つのlonglongintがあり、そのビットを取得して、それから4つのunsignedshortintを作成するとします。
ここでは、特定の順序はそれほど重要ではありません。
私は一般的に、ビットをシフトしてunsignedshortintのサイズに切り捨てる必要があることを知っています。でもどこかで変な間違いをするかもしれないと思うのでお願いします。
1つのlonglongintがあり、そのビットを取得して、それから4つのunsignedshortintを作成するとします。
ここでは、特定の順序はそれほど重要ではありません。
私は一般的に、ビットをシフトしてunsignedshortintのサイズに切り捨てる必要があることを知っています。でもどこかで変な間違いをするかもしれないと思うのでお願いします。
#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;
}
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
ここvalue
で、long long int
はでx
、4つのショーツの場合は0、16、32、または48です。
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
これで、ビットシフトをいじることなく、考えていることを実行できます。