バイトとさまざまな整数データ型の間で変換できるクラスを作成しています。配列を反転してからデータを変換する代わりに、システムのエンディアンがデータと同じかどうかを判断することにしました。そうであれば、単純にデータを整数にマップします。64 ビット整数の場合は次のようになります。
result = (long)(
(buffer[index] << 56) |
(buffer[index + 1] << 48) |
(buffer[index + 2] << 40) |
(buffer[index + 3] << 32) |
(buffer[index + 4] << 24) |
(buffer[index + 5] << 16) |
(buffer[index + 6] << 8) |
(buffer[index + 7]));
システムとデータのエンディアンが異なる場合は、次のように逆になります。
result = (long)(
(buffer[index]) |
(buffer[index + 1] << 8) |
(buffer[index + 2] << 16) |
(buffer[index + 3] << 24) |
(buffer[index + 4] << 32) |
(buffer[index + 5] << 40) |
(buffer[index + 6] << 48) |
(buffer[index + 7] << 56));
result
は 64 ビットの符号付き整数です
buffer
バイト配列です
index
読み取りを開始するバッファ内の位置を示す 32 ビットの符号付き整数です
私の質問は...私はこれを間違っていますか、それとも配列を逆にしたりコピーを作成したりせずに変換を行うための本当に簡単な方法ですか?
これは、システムとデータのエンディアンのすべての組み合わせで機能し、2 つを正しく変換する必要があるようです。
読みやすい、または一般的により単純な別の方法はありますか?