我已尝试过以下但似乎最终没有获得正确的值: 我有一个可能大于32位的数字,因此我想将它存储到两个32位数组索引中。 我打破了他们:
int[0] = lgval%(2^32);
int[1] = lgval/(2^32);
并重新组装我试过的64位值: CPU:PowerPC e500v2
lgval= ((uint64)int[0]) | (((uint64)int[1])>>32);
由于我们处于大端,因此心灵向右移动。由于某些原因,我最终得不到正确的值,为什么不呢?我在这里做错了什么?
答案 0 :(得分:2)
^
运算符是xor,而不是幂。
您想要这样做的方式可能是:
uint32_t split[2];
uint64_t lgval;
/* ... */
split[0] = lgval & 0xffffffff;
split[1] = lgval >> 32;
/* code to operate on your 32-bit array elements goes here */
lgval = ((uint64_t)split[1] << 32) | (uint64_t)(split[0]);
正如Raymond Chen所说,endianness是关于存储的。在这种情况下,如果要将split-32-bit-int中的字节作为单个64位值访问,则只需要考虑字节序。无论如何,这可能不是一个好主意。