Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Delphi double => Java double / 6 сообщений из 6, страница 1 из 1
08.06.2012, 13:24:25
    #37831017
MAX2002
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
Столкнулся с проблемой есть код на дельфе который в массив записывает переменную типа double,
Код: pascal
1.
2.
3.
4.
5.
var
TmpTime : double;
SendBuffer : PChar;
....
Move(TmpTime,SendBuffer[0],8);



Пытаюсь на Java-е из массива достать double фигня получается, вот код
Код: java
1.
2.
        long TmpLong=(0xFF & paramArrayOfByte[(7)]) << 56 |(0xFF & paramArrayOfByte[( 6)]) << 48 |(0xFF & paramArrayOfByte[(5)]) << 40 |(0xFF & paramArrayOfByte[( 4)]) << 32 |(0xFF & paramArrayOfByte[( 3)]) << 24 | (0xFF & paramArrayOfByte[( 2)]) << 16 | (0xFF & paramArrayOfByte[(1)]) << 8 | 0xFF & paramArrayOfByte[0];
		return Double.longBitsToDouble(TmpLong);


как мне дельфиский дубль достать из массива?
...
Рейтинг: 0 / 0
08.06.2012, 13:37:49
    #37831040
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
Может порядок битов\байтов другой? Загоните одно и то же значение в Java и Delphi и посмотрите бинарное содержимое в массиве.
...
Рейтинг: 0 / 0
08.06.2012, 13:52:32
    #37831076
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
BlazkowiczМожет порядок битов\ байтов другой? Загоните одно и то же значение в Java и Delphi и посмотрите бинарное содержимое в массиве.
+1

погугли bigEndian litleEndian.
...
Рейтинг: 0 / 0
08.06.2012, 15:08:14
    #37831248
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
...
Рейтинг: 0 / 0
08.06.2012, 16:03:55
    #37831371
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
package readdoubleapp;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.channels.FileChannel;

public class ReadDoubleApp {
    final static String PATH = "D:/fil.dat";
    public static void main(String[] args) {
        PrintStream s = System.out;
        try {
            FileInputStream fis = new FileInputStream(PATH);
            FileChannel channel = fis.getChannel();

            ByteBuffer bb = ByteBuffer.allocate(64 * 1024);
//            bb.order(ByteOrder.BIG_ENDIAN); //по-умолчанию стоит BIG_ENDIAN
//            bb.order(ByteOrder.LITTLE_ENDIAN);
            bb.order(ByteOrder.nativeOrder()); //для моей платформы родной LITTLE_ENDIAN (у меня AMD), на Интеле - BIG_ENDIAN
            
            channel.read(bb);
            bb.flip();

            int cnt = 0;
            while (bb.remaining() >= 8) {
                s.print("Дабл [");
                s.print(++cnt);
                s.print("]: ");
                s.println(bb.getDouble());
            }
        } catch (IOException e) {
            s.println("IOException : " + e);
        }
    }
}



Только BIG_ENDIAN
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
package readdoubleapp;

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintStream;

public class ReadDoubleApp {

    final static String PATH = "D:/fil.dat";

    public static void main(String[] args) {
        PrintStream s = System.out;
        try {
            FileInputStream fis = new FileInputStream(PATH);
            DataInputStream dis = new DataInputStream(fis);

            int cnt = 0;
            while (dis.available() >= 8) {
                s.print("Дабл [");
                s.print(++cnt);
                s.print("]: ");
                s.println(dis.readDouble());
            }
        } catch (IOException e) {
            s.println("IOException : " + e);
        }
    }
}
...
Рейтинг: 0 / 0
08.06.2012, 17:54:39
    #37831659
MAX2002
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi double => Java double
avp.mkMAX2002,
http://stackoverflow.com/questions/6471177/converting-8-bytes-of-little-endian-binary-into-a-double-precision-float
(Если платформа не micro edition)
Ага, спасибо, все получилось !!!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Delphi double => Java double / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]