Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Два LongWord-а в Double, как конвертировать? 
:(
    Опции темы
zedx
Дата 9.2.2010, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Есть задача получить из 2-х переменных типа LongWord одну Double. 

Придумал вот что:
Код
function GetDouble (Lo,Hi:LongWord):Double;
begin
  asm
    mov [ebp-$08], eax
    mov [ebp-$04], edx
  end;
end;

переводит вроде правильно, но как это без асма сделать?
PM MAIL   Вверх
Rrader
  Дата 10.2.2010, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Асмовский код в таком виде потенциально опасен, не следует адресоваться по жестко вшитым смещениям
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  ALow, AHigh: Integer;
  C: Double; //Int64
begin
  ALow := 10;
  AHigh := 10;
  C := ALow or Int64(AHigh) shl 32;
  ShowMessage(FloatToStr(C));
end;



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Mikel
Дата 10.2.2010, 11:11 (ссылка)   | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 882
Регистрация: 30.3.2002
Где: Саратов

Репутация: нет
Всего: 2



Что-то мне кажется что такой вариант не подойдет, т.к. это будет просто целое число ;)
Можно так попробовать



Код

function GetDouble (Lo,Hi:LongWord):Double;
var t:packed record Lo,Hi:Longword; end;
begin
t.Lo:=Lo;
t.Hi:=Hi;
Result:=Double(t);
end;


или так...

Код

function GetDouble2 (Lo,Hi:LongWord):Double;
begin
LongWord((@Result)^):=Hi;
PLongWord(LongWord(@Result)+4)^:=Lo;
end;



--------------------
...so remember, it's better to burn out than to fade away
PM MAIL ICQ   Вверх
zedx
Дата 10.2.2010, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 63
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Цитата(Mikel @ 10.2.2010,  11:11)
или так...

Код

function GetDouble2 (Lo,Hi:LongWord):Double;
begin
LongWord((@Result)^):=Hi;
PLongWord(LongWord(@Result)+4)^:=Lo;
end;

Вот, именно то, что я искал. Спасибо.
PM MAIL   Вверх
Beltar
Дата 16.2.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 627
Регистрация: 11.1.2006

Репутация: 0
Всего: 7



Более простым для сохранения целостности мозга в процессе понимания, что же код делает, было бы использование вариантной записи.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0761 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.