Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2012, 19:32   #1
Skail
Пользователь
 
Регистрация: 07.04.2011
Сообщений: 18
По умолчанию Перевести из 16-го числа в дробное десятичное

Привет всем. Как перевести из 16-го числа в дробное десятичное. Например есть число A027AFDF5D984840 из него получаем 49.1903648. Знаю что в C# есть такая функция BitConverter.ToDouble, а как реализовать это на Delphi?
Skail вне форума Ответить с цитированием
Старый 28.04.2012, 20:14   #2
WhiskasTM
Подтвердите свой е-майл
 
Регистрация: 11.04.2012
Сообщений: 85
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
const
d8: array [0..7] of byte = ($A0,$27,$AF,$DF,$5D,$98,$48,$40);
var
D:double;
begin
  D:=Double(d8);
  showmessage(floattostr(D));
end;
только что попробовал сделать функцию компилятор кричит на invalid typecast, Incompatible types, 'OF' expected but '[' found, ещё и сказал что setlength несовместим с динамическим массивом

Последний раз редактировалось WhiskasTM; 28.04.2012 в 20:28.
WhiskasTM вне форума Ответить с цитированием
Старый 29.04.2012, 08:33   #3
Skail
Пользователь
 
Регистрация: 07.04.2011
Сообщений: 18
По умолчанию

WhiskasTM, спасибо большое, помог.
Skail вне форума Ответить с цитированием
Старый 29.04.2012, 09:31   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от WhiskasTM
только что попробовал сделать функцию компилятор кричит на invalid typecast, Incompatible types, 'OF' expected but '[' found, ещё и сказал что setlength несовместим с динамическим массивом
вы похоже перепутали "динамический массив" (dynamic arrays) с "открытым массивом" (open arrays)

в Pascal (ещё в те далёкие времена, когда динамических массивов и в помине не было) разработчиками компилятора было сделано следующее улучшение. в функции описывался т.н. "открытый массив" - это статический массив, являющий ПАРАМЕТРОМ процедуры/функции, размеры которого НЕ ОПИСЫВАЛИСЬ.

выглядело это так:
Код:
function SumArr(MyMassiv : array of integer) : integer;
var
  i, sm : integer;
begin
  sm := 0;
  for i:=Low( MyMassiv ) to High( MyMassiv ) do
    sm := sm + MyMassiv[i];
  SumArr := sm
end;

var 
  A : array[1..10] of integer;
  B : array['a'..'z'] of integer;
  i : integer;
  ch : char;
begin
  {заполним массив A}
  for i:=1 to 10 do A[i] := i;

  {заполним массив B константой 1}
  for ch:='a' to 'z' do B[ch] := 1;

  WriteLn('Сумма элементов массива A = ', SumArr( A ));

  WriteLn('Сумма элементов массива B = ', SumArr( B ));

  readln;

end.
в вашем же случае нужно определить свой тип и именно его использовать в процедуре функции. И, кстати, тут никаких динамических массивов и близко не нужно. если Вы определите массив длины, отличной от размерности Double - то получите или ошибку при компиляции/выполнении, либо, что ещё хуже - полный мусор (бред) при попытке конвертации нескольких байт в Double...

это будет выглядеть примерно так:
Код:
type MyDoubleArray = array [0..7] of byte;

function ConvertArrayToDouble(const d8 : MyDoubleArray) : double;
begin
  result := Double(d8);
end;

procedure TForm3.Button1Click(Sender: TObject);
const
  dd1 : MyDoubleArray = ($A0,$27,$AF,$DF,$5D,$98,$48,$40);
  dd2 : MyDoubleArray = ($B0,$21,$A0,$D0,$11,$12,$12,$40);
begin
  showmessage(floattostr( ConvertArrayToDouble( dd1 )));
  showmessage(floattostr( ConvertArrayToDouble( dd2 )));
end;

Последний раз редактировалось Serge_Bliznykov; 29.04.2012 в 09:37.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
операция мод применимо к типу float,проверка числа- целое или дробное all_is_fear Помощь студентам 3 17.11.2011 16:16
Разбить дробное на 2 целых числа revaldo666 Общие вопросы C/C++ 10 13.06.2011 03:12
Перевести отрицатьльное дробное число в двоичную систему Иллидан Помощь студентам 0 14.11.2010 13:04
Перевести целое положительное десятичное число в шестнадцатеричное счисление Alfis Паскаль, Turbo Pascal, PascalABC.NET 3 28.12.2008 20:40
Алгоритм перевода двоичного числа в десятичное и обратно strab Общие вопросы Delphi 5 17.06.2008 21:33