题
我有
_int8 arr[0] = 0;
_int8 arr[1] = 0;
_int8 arr[2] = 14;
_int8 arr[3] = 16;
我需要将其转换为一个_int32,使用AS ARR [0]作为第一部分<..>和ARR [3]作为最后。最后应该是
_int32 back = 3600;
我应该像这样使用位转移或SMTH吗?
解决方案
如果您知道字节订购(即大端或小恩迪安,请在Wikipedia上查看),并且以正确的顺序设置了数组:您可以做:
back = *(_int32 *)arr;
这只会将您的4个字节的数组解释为一个持有一个32位整数的缓冲区。不过,在您的示例中,我认为您已经为Big Endian设置了它,而X86不是。因此,您需要交换一些字节。
例如:
_int32 back = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];
或类似的东西。
其他提示
把它们全部扔给 int
然后使用:
(arr[0] << 24) | (arr[1] << 16) | (arr[2] << 8) | arr[3]
或者:
_int32 back = 0;
for (int i = 0; i < 4; ++i)
back = (back << 8) | arr[i];
这可能是我的SCO编译器,但我认为如果我不使用(ARR [0]&0xFF),我遇到了问题,等等进行了轮班。当然不会伤害任何东西。
不隶属于 StackOverflow