从32 + 32位到双倍

时间:2014-07-02 15:37:16

标签: java endianness bytebuffer

由于某种原因,我需要从两个32位中检索一个double值。让我解释: 在服务器端,他们发送格式如下的双精度值:

  // C/C++ = SERVER 
  double big;
  big = 12345.67890;
  unsigned int *pi = (unsigned int *)&big;

  unsigned int x = pi[0];
  unsigned int y = pi[1];

他们从服务器向客户端发送一个带有两个unsigned int格式的双重格式(x和y,在我的情况下每个32位)。 在客户端(JAVA),我需要再次从接收的两个无符号整数构建double值。我试了这个没有成功:

// double double64 = buffer2.getDouble();
ByteBuffer buffer = ByteBuffer.allocate(16);
buffer.putLong(my_int_x);
buffer.putLong(my_int_y);
buffer.flip();
double double64 = buffer.getDouble();

也许是因为我收到了32位整数而我使用“putLong”?

1 个答案:

答案 0 :(得分:4)

要将两个整数(包含双精度数据)转换为双精度数,您不需要临时缓冲区。你可以这样做:

long doubleBits = my_int_x & 0xFFFFFFFFL;
doubleBits <<= 32;
doubleBits |= my_int_y & 0xFFFFFFFFL;
double myDouble = Double.longBitsToDouble(doubleBits);

但是,请检查您在Java程序中阅读my_int_x和my_int_y的方式。也许你可以在那一刻直接获得双倍(理想情况下,你应该)。