簡體   English   中英

Java字節數組進行雙轉換

[英]Java byte array to double conversion

我正在嘗試將字節數組轉換為雙精度值。

private static double bytesToDouble(byte[] array) {
    long l=bytesToLong(array[7],array[6],array[5],array[4],array[3],array[2],array[1],array[0]);
    return Double.longBitsToDouble(l);
}

    private static long bytesToLong(byte b7,byte b6,byte b5,byte b4,byte b3,byte b2,byte b1,byte b0){
  //se il byte è signed viene trasf. in unsigned
  return (b0<0 ? b0+256L : b0)        |
         ((b1<0 ? b1+256L : b1) << 8) |
         ((b2<0 ? b2+256L : b2) << 16)|
         ((b3<0 ? b3+256L : b3) << 24)|
         ((b4<0 ? b4+256L : b4) << 32)|
         ((b5<0 ? b5+256L : b5) << 40)|
         ((b6<0 ? b6+256L : b6) << 48)|
         ((b7<0 ? b7+256L : b7) << 56);
}

無論如何,有些東西似乎無法正常工作。 我知道輸入數組是

0 0 0 0 0 0 12 -124

預期值為641.5,但我得到了另一個值(-3.591469701136079E-289)。

我知道生成字節序列的代碼效果很好,因為很長一段時間以來它一直在生產環境中使用。

如何操縱bytes數組(或字節本身)以獲得期望值?

問候

嘗試使用java.nio.ByteBuffer( https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html

例如,

double val = ByteBuffer.wrap(array).getDouble(0);
    byte[] bytes = new byte[8];
    ByteBuffer.wrap(bytes).putDouble(641.5);
    System.out.println("Result: " + Arrays.toString(bytes));
    // Result: [64, -124, 12, 0, 0, 0, 0, 0]

因此字節順序是低位字節序(Windows Intel),尤其是缺少一個字節值,一個read()太多了; 我的猜測是一個愚蠢的錯誤,例如:

while (read() != -1) {
    ... read array

可以通過以下方式轉換正確的數據:

double val = ByteBuffer.wrap(array).order(ByteOrder.LITTLE_ENDIAN).getDouble();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM