質問

私は持っています

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

最初の部分<..>>およびarr [3]としてasr [0]としてasr [0]を使用して1つの_int32に変換する必要があります。最終的にはそうあるべきです

_int32 back = 3600;

これを達成するには、ビットシフトまたはそのようなSMTHを使用する必要がありますか?

役に立ちましたか?

解決

バイトの注文(つまり、Big EndianまたはLittle Endian、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コンパイラですが、シフトを行うために使用しなければ問題が発生したと思います。確かに何も傷つけません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top