如何从一个long long int中提取四个unsigned short int?
-
02-07-2019 - |
题
假设我有一个long long 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
对于这四个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