我有

_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),我遇到了问题,等等进行了轮班。当然不会伤害任何东西。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top