1つのlong long intから4つのunsigned short intを抽出する方法は?
-
02-07-2019 - |
質問
1つのlong long intがあり、そのビットを取り出して、そこから4つの符号なしshort intを構築するとします。
ここでは特定の順序は重要ではありません。
ビットをシフトし、unsigned short intのサイズに切り捨てる必要があることを一般的に知っています。しかし、どこかで奇妙な間違いを犯すかもしれないと思うので、お願いします。
解決
#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つのshortに対して0、16、32または48です。
union LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};
それは、ビットシフトをいじる必要なく、あなたが考えていることを行うべきです。
所属していません StackOverflow