私は持っています
_int8 arr[0] = 0;
_int8 arr[1] = 0;
_int8 arr[2] = 14;
_int8 arr[3] = 16;
最初の部分<..>としてarr[0]を使用し、最後の部分としてarr [3]を使用して、これを1つの_int32に変換する必要があります。結局、それは
_int32 back = 3600;
これを実現するには、ビットシフトまたはそのようなsmthを使用する必要がありますか?
それらをすべてキャストしてから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];
バイト順 (つまり、ビッグ エンディアンまたはリトル エンディアン、ウィキペディアで確認してください) を知っていて、配列が正しい順序で設定されている場合は、次のように実行できます。
back = *(_int32 *)arr;
これは、4 バイトの配列を単一の 32 ビット整数を保持するバッファーとして解釈するだけです。ただし、あなたの例では、ビッグエンディアン用にセットアップされていると思いますが、x86 はそうではありません。したがって、いくつかのバイトを交換する必要があります。
例えば:
_int32 back = arr[0] << 24 | arr[1] << 16 | arr[2] << 8 | arr[3];
またはそのようなもの。
おそらく私の SCO コンパイラですが、シフトを行うために (arr[0]&0xff) などを使用しないと問題が発生したと思います。確かに何も痛くありません。