получить неправильные значения при чтении Double из двоичного файла в Java - PullRequest
1 голос
/ 07 ноября 2011
RandomAccessFile in = new RandomAccessFile("BOT.grd", "r");
in.seek(28);
double xll=in.readDouble();

Выше приведен код, который я использую для чтения двойных данных, которые присутствуют в ячейке размером от 29 до 36 байт. Имеется значение 500, но я получаю 2.088E-317

1 Ответ

1 голос
/ 07 ноября 2011

Кажется, что этот файл хранится в другом Endianness , чем тот, который использует Java. Вероятно, перед преобразованием в удвоение байты необходимо поменять местами, попробуйте следующий код, чтобы прочитать значение:

long   l = in.readLong();
double d = Double.longBitsToDouble(Long.reverseBytes(l));

Вот пример, иллюстрирующий проблему:

double d = 500.0;

long l1 = Double.doubleToLongBits(d);
long l2 = Long.reverseBytes(l1);

System.out.println(Double.longBitsToDouble(l1));
System.out.println(Double.longBitsToDouble(l2));

Выход:

500.0
2.088356E-317
...