4x8位int到32位整数

时间:2011-01-16 17:48:40

标签: c++ int 32-bit 8-bit

我有

_int8 arr[0] = 0;
_int8 arr[1] = 0;
_int8 arr[2] = 14;
_int8 arr[3] = 16;

我需要使用as arr [0]将其转换为一个_int32作为第一部分< ..>和arr [3]一样。 最后它应该是

_int32 back = 3600;

我应该使用位移或smth来实现这一目标吗?

3 个答案:

答案 0 :(得分:8)

将它们全部投放到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];

答案 1 :(得分:4)

如果您知道字节顺序(即大端或小端,请在维基百科上查看),并且数组按正确的顺序设置,您可以这样做:

back = *(_int32 *)arr;

这只是将4个字节的数组解释为包含单个32位整数的缓冲区。在你的例子中,我认为你已经为big endian设置了它而x86却没有。所以你需要交换一些字节。

例如:

_int32 back = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];

或类似的东西。

答案 2 :(得分:1)

这可能是我的SCO编译器,但我认为如果我没有使用(arr [0]&amp; 0xff)等我做了转换就遇到了问题。当然不会伤害任何东西。