2015-11-16 32 views
-2

我要存储一个双重的整数数组,并能够再次读取双,如:的Java存储双在整数[]

int[2] doubleToIntArr(double)

double intArrToDouble(int[2])

如何才能实现这一目标?

+0

是的。你做了什么? – Tunaki

+0

@Tunaki,显然我不知道该怎么做。这就是为什么我问... – Robin

+1

有多种方式来存储一个'双'作为2个整数,这取决于你为什么想要这样做,首先 –

回答

6

这里有一种方法:

  1. 使用Double.doubleToLongBits(double)打开doublelong

  2. 使用移位和掩码来提取long的高位和低位部分,并将它们存储在int[](或Integer[])中。

(有实现这种其它方式,但如果你关心性能,这可能是最有效的方式做到这一点的纯Java)。


注意,这种转变在计算上并不有用。除了将它们变回double之外,用int这对值很难做任何有意义的计算。

+0

谢谢,我应该想出了同样的事情。 – Robin

2

java.nio.ByteBuffer类的方法允许您读取和写入字节数组的标准数据类型。

您应该可以使用它来编写您的Double,然后读出两个ints,例如,

ByteBuffer buf = ByteBuffer.allocate(8); 
buf.putDouble(d); 
int i1 = buf.getInt(0); 
int i2 = buf.getInt(4); 
4
double d = 100; 
    long l = Double.doubleToLongBits(d); 
    int i1 = (int)(l >> 32); 
    int i2 = (int)l; 

    double d2 = Double.longBitsToDouble(((long)i1 << 32) | (i2&0xFFFFFFFFL)); 
    System.out.println(d2);