由于某种原因,我需要从两个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”?
答案 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的方式。也许你可以在那一刻直接获得双倍(理想情况下,你应该)。