アライメントされた配列uint8[8]
をdouble
に変換しようとすると、少し難題があります。 ビット操作でuint8[4]
をlong
に変換することは特に簡単でしたが、double
が符号ビットに関して面倒になることがありますか?アライメントされた配列uint8 [8]をdoubleに変換する
ByteBuffer.wrap(bytes).getDouble()
を使用しますが、私はこのコードを実装しようとしましたが、最後のコマンドがエラーに
Expression is not assignable
と
Shift count >= width of type
long tempHigh = 0;
long tempLow = 0;
double sum = 0;
tempHigh |= buffer[0] & 0xFF;
tempHigh <<= 8;
tempHigh |= buffer[1] & 0xFF;
tempHigh <<= 8;
tempHigh |= buffer[2] & 0xFF;
tempHigh <<= 8;
tempHigh |= buffer[3] & 0xFF;
tempLow |= buffer[4] & 0xFF;
tempLow <<= 8;
tempLow |= buffer[5] & 0xFF;
tempLow <<= 8;
tempLow |= buffer[6] & 0xFF;
tempLow <<= 8;
tempLow |= buffer[7] & 0xFF;
sum |= ((tempHigh & 0xFFFF) <<= 32) + (tempLow & 0xFFFF);
どのようにすることができますを与えるC.
でそのことは容易ではないと仮定したJavaで
この手順は正しく行われますまたは私は行ったエラーを解決しますか?
ありがとうございます。
例を挙げてください。今私はサインの問題を見る。 – JavaCake
ビッグエンディアンの場合は、すべてを反転する必要がありますか? – JavaCake
*データ*がビッグエンディアンの場合は、配列のオフセットを反転する必要があります。このコードはマシンのエンディアンと100%独立しています。 –