Конвертация Double из Delphi / Pascal в Java

1

Мне нужно прочитать двоичный файл, созданный в Windows SO, используя язык Delphi/Pascal. Я знаю, что этот файл является фиксированной длиной, а первые 8 байтов являются двойными. Я скопировал этот файл из Windows SO в Ubuntu SO. Когда я пытаюсь прочитать этот файл, внутри Ubunto SO, используя Java-язык, я вижу: Double = 84000

[0, 0, 0, 0, 0, -126, -12, 64]

Поэтому я создаю тот же двойной (84000) внутри Java, запустив Ubuntu SO:

Double yourDouble = (double) 84000;
byte[] bytes = new byte[8];
java.nio.ByteBuffer.wrap(bytes).putDouble(yourDouble);

Посмотрев на массив байтов, я вижу:

[64, -12, -126, 0, 0, 0, 0, 0]

Очевидно, массив байтов инвертирован. Нужно ли читать этот файл? Или мне нужно инвертировать массив байтов?

EDIT: Это инвертировано из-за большого Endian e Little Endian?

  • 0
    Windows SO & Ubuntu SO для меня загадка.
  • 0
    @user246408 user246408 SO в Linux - это то же самое, что DLL в Windows.
Теги:
double

1 ответ

4
Лучший ответ

Java, по крайней мере, публично, представляет данные в байтовом порядке большого байта, даже если внутри нее может использоваться другой байт по соображениям эффективности. Delphi, по крайней мере на Windows, немного ориентирован. Поэтому вам нужно изменить порядок байтов.

У вас будет такая же проблема для встроенных типов данных. И любые 16 или 32-битные символьные данные.

  • 0
    Я думал, что big endian и little endian связаны с архитектурой процессора.
  • 1
    Big против little endian применяется в аппаратной архитектуре И в порядке байтового потока, используемого при сериализации.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню