Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2013, 07:05
ArtIntellAnd ArtIntellAnd вне форума
Прохожий
 
Регистрация: 23.09.2011
Сообщения: 11
Репутация: 10
По умолчанию Перевести большой массив байт в тип дробное число

Привет всем. Всегда переводил массив байт в тип Double, так были не большие числа. Но столкнулся с проблемой при переводе числа больше чем Double.
Вот пример:
Код:

Код:
var
 d8: array [0..7] of byte;
 D:Double;
begin
   d8[0]:=StrToInt('$01');
   d8[1]:=StrToInt('$02');
   d8[2]:=StrToInt('$03');
   d8[3]:=StrToInt('$04');
   d8[4]:=StrToInt('$05');
   d8[5]:=StrToInt('$06');

   D:=Double(d8);
end;

А как быть если у меня массив байт не [0..7] а размером [0..15]
Ответить с цитированием
  #2  
Старый 25.01.2013, 16:14
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Вообще-то такой перевод в дабл мягко говоря... не правильный. Дробные типы имеют не простое устройство, там есть степень и значимая часть, таким простым копированием будет бред. Разве что делфа сама догадается перевести массив в int64, а потом оттуда в дабл специальным образом.
Что представляют собой эти самые элементы массива? Если байтовые разряды, то считаем, что число записано в 256-ричной системе счисления, где 1 байт - 1 разряд.
Код:
d := 0;
for i := count - 1 downto 0 do
 d := d * 256 + arr[i];

ЗЫЖ 8 байт - это около 1.8*10^19. Если ты собираешься переводить 16 байт, значит число у тебя может быть примерно 3.24*10^38. Ты уверен, что тебе нужно переводить в дабл с дикой потерей точности? double способен вместить около 16 значащих цифр, остальное будет считаться как забитое нулями. То есть число 0x12345678876543215555555555555555 будет обрабатываться как 0x12345678876543210000000000000000.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 25.01.2013 в 16:26.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:39.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025