Мне нужно прочитать двоичный файл, созданный в 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?
Java, по крайней мере, публично, представляет данные в байтовом порядке большого байта, даже если внутри нее может использоваться другой байт по соображениям эффективности. Delphi, по крайней мере на Windows, немного ориентирован. Поэтому вам нужно изменить порядок байтов.
У вас будет такая же проблема для встроенных типов данных. И любые 16 или 32-битные символьные данные.