假设我有一个长长的整数,并且想要将其位数构建成四个无符号短整数。这里特定的顺序并不重要。
我通常知道需要移位和截断到无符号短整数的大小。但我认为我可能会在某个地方犯一些奇怪的错误,所以我来问一下。
我通常知道需要移位和截断到无符号短整数的大小。但我认为我可能会在某个地方犯一些奇怪的错误,所以我来问一下。
#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
为四个短整数中的0、16、32或48。
int
大小的规范标准的编译器时,程序X严格遵守。”但可惜的是,事情正在朝相反的方向发展;编译器编写人员对支持那些在1989年至2009年间的99%编译器上运行的结构并不感兴趣。 - supercatunion LongLongIntToThreeUnsignedShorts {
long long int long_long_int;
unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};