不给代码,讲下大致思路。
在java里,是用IEEE754标准来定义float,double这种浮点数的。
你可以先查下什么是IEEE754标准,以及它是如何通过指数和尾数的方式来表示浮点数的。
然后在java里,double类型的长度是64位,也就是刚好8个byte的长度,通过IEEE754表示的话,类似于下面这样的:
符号位 指数位 尾数位 指数偏移量
32位 1[31] 8[23-30] 23[0-22] 127
64位 1[63] 11[52-62] 52[0-51] 1023
所以,你只要把每个byte表示成二进制后拼成64位的二进制数,然后根据上面的公式来算出对应double类型的值就可以了。
public class Marik
{
public static double getDouble(byte[] b)
{
long l;
l = b[0];
l &= 0xff;
l |= ((long) b[1] << 8);
l &= 0xffff;
l |= ((long) b[2] << 16);
l &= 0xffffff;
l |= ((long) b[3] << 24);
l &= 0xffffffffl;
l |= ((long) b[4] << 32);
l &= 0xffffffffffl;
l |= ((long) b[5] << 40);
l &= 0xffffffffffffl;
l |= ((long) b[6] << 48);
l &= 0xffffffffffffffl;
l |= ((long) b[7] << 56);
return Double.longBitsToDouble(l);
}
public static void main(String[] args)
{
byte[] bs = { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
int start = 0;
for(int i = 0; i < bs.length / 8; i++)
{
byte[] dest = new byte[8];
System.arraycopy(bs, start, dest, 0, dest.length);
start += dest.length;
System.out.println(getDouble(dest));
}
}
}