如何从一个long long int中提取四个unsigned short int?
时间:2020-03-06 14:52:11 来源:igfitidea点击:
假设我有一个long long int并想利用它的位并从中构造出四个无符号的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; }
union LongLongIntToThreeUnsignedShorts { long long int long_long_int; unsigned short int short_ints[sizeof(long long int) / sizeof(short int)]; };
那应该可以完成我们正在考虑的事情,而不必为移位而烦恼。
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))
其中"值"是" long long int",而" x"则是四个短裤的0、16、32或者48.