по какой-то причине мне нужно получить двойное значение из двух 32 бит. Позвольте мне объяснить: на стороне сервера они отправляют двойное значение, отформатированное так:
// C/C++ = SERVER
double big;
big = 12345.67890;
unsigned int *pi = (unsigned int *)&big;
unsigned int x = pi[0];
unsigned int y = pi[1];
они отправляют с сервера клиенту двойной формат с двумя неподписанными int (x и y, 32 бит каждый в моем случае). На стороне клиента (JAVA) мне нужно снова создать двойное значение из двух полученных беззнаковых целых чисел. Я пробовал это без успеха:
// 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"?
Чтобы преобразовать два ints (содержащих двойные данные) в double, вам не нужен временный буфер. Вы можете сделать это:
long doubleBits = my_int_x & 0xFFFFFFFFL;
doubleBits <<= 32;
doubleBits |= my_int_y & 0xFFFFFFFFL;
double myDouble = Double.longBitsToDouble(doubleBits);
Однако проверьте, как вы читаете my_int_x и my_int_y в своей программе Java. Возможно, вы можете получить двойную прямую в тот момент (в идеале, вы должны).