从无符号长长错误中获取最多32个有效位

时间:2017-06-07 23:33:44

标签: c++ arrays

我试图将存储在unsigned long long中的最重要的32位存储到unsigned int中。 我可以简单地使用下面从Stack Overflow获得的代码:

uint64_t temp;
uint32_t msw, lsw;
msw = (temp & 0xFFFFFFFF00000000) >> 32;
lsw = temp & 0x00000000FFFFFFFF;

但是,我使用数组做了类似的事情:

unsigned long long * bits64 = new unsigned long long[1];
*(bits64 + 0) = 18446744073709551615;
unsigned int * first32 = (*(bits64 + 0) & 0xFFFFFFFF00000000) >> 32;

为什么我

  

'无法使用rvalue初始化'unsigned int *'类型的变量   类型为unsigned long long'

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

声明

unsigned int * first32 = (*(bits64 + 0) & 0xFFFFFFFF00000000) >> 32;

LHS的类型为unsigned int*,而RHS的类型为unsigned long long。这就是编译器所抱怨的。

您可以使用:

unsigned int first32 = (*(bits64 + 0) & 0xFFFFFFFF00000000) >> 32;

如果必须使用动态分配的内存,可以使用:

unsigned int * first32 = new unsigned int[1];
*first32 = (*(bits64 + 0) & 0xFFFFFFFF00000000) >> 32;