5

假设我有一个 long long int 并且想要取出它的位并从中构造四个 unsigned short int。

特定的顺序在这里并不重要。

我通常知道我需要移位并截断到 unsigned short int 的大小。但我想我可能会在某个地方犯一些奇怪的错误,所以我问。

4

3 回答 3

11
#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;
}
于 2008-09-29T10:44:58.627 回答
3
(unsigned short)((((unsigned long long int)value)>>(x))&(0xFFFF))

value你的long long int,是x0, 16, 32 或 48 对于四条短裤。

于 2008-09-29T10:48:10.287 回答
2
union LongLongIntToThreeUnsignedShorts {
   long long int long_long_int;
   unsigned short int short_ints[sizeof(long long int) / sizeof(short int)];
};

那应该做你正在考虑的事情,而不必搞乱位移。

于 2008-09-29T10:45:57.187 回答