我试图将存储在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'
我该如何解决这个问题?
答案 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;