我有
_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来实现这一目标吗?
答案 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)等我做了转换就遇到了问题。当然不会伤害任何东西。