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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Число с плавающей точкой, Побайтовое представление 
:(
    Опции темы
mikleN
Дата 1.8.2004, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уважемый ALL. подскажите, пожалуйска, есть ли в Delphi или в Win API функции, чтобы посмотреть побайтовое представление числа с плавающей точкой и наоборот, чтобы ввести по байтам такое число. Обращаю внимание - число с плавающей точкой - т.е. там мантисса, степень и т.д в соотвествии с IEEE 754. Может где то код есть готовый. Весьма желательно чтобы он был на Delphi, код таких фнкций на C у меня есть. Могу если кому надо предоставить.
Спасибо большое.
PM MAIL   Вверх
p0s0l
Дата 1.8.2004, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Посмотреть побайтовое представление ?...
Код

procedure TForm1.Button6Click(Sender: TObject);
var
 r : real;
 rbytes : array [0..SizeOf(r)-1] of byte absolute r;
 i : integer;
 s : string;
begin
 r := 1234.5;
 s := '';
 for i := 0 to High(rbytes) do
   s := s + IntToHex(rbytes[i], 2) + ' ';
 MessageBox (0, PChar(s), 'Bytes', 0);
end;

Чтобы занести побайтово обратно - пиши в массив rbytes...
Или может я чего недопонял ?... К чему тут IEEE ?

Добавлено @ 22:35
Или тебе надо выделить из этого мантиссу и порядок ?


--------------------
С уважением, г-н Посол.
PM   Вверх
mikleN
Дата 2.8.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо огромное. Мне (бум-буму) такое решение не приходило в голову в течение 3 дней. :sad:
Я занимался тем, что переводил огромную фукцию с C со всякими OR AND SHR, которая в соотвествии со спецификацией IEEE и преобразует, выделяя мантиссу, порядок, знак.

Цитата
Или тебе надо выделить из этого мантиссу и порядок ?

Нет, нет. Они мне не нужны, просто я другого способа не нашел.
Спасибо.
PM MAIL   Вверх
Girder
Дата 2.8.2004, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



А можно и так:

Основная функция:
Код
procedure ZZZ(ex: Pointer; i:integer);
type TFE=array of byte;
begin
if i>0 then
 begin
  repeat
   dec(i);
   Form1.Memo1.Lines.Add(IntToHex(TFE(ex)[i],2));
  until (i=0);
 end;
end;


Формат использования:
Код
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Memo1: TMemo;
   Button2: TButton;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure ZZZ(ex: Pointer; i:integer);
type TFE=array of byte;
begin
if i>0 then
 begin
  repeat
   dec(i);
   Form1.Memo1.Lines.Add(IntToHex(TFE(ex)[i],2));
  until (i=0);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var e:extended;
begin
e:=StrToFloat(Edit1.Text);
memo1.Clear;
zzz(@e,SizeOf(e));
end;

procedure TForm1.Button2Click(Sender: TObject);
var e:Real;
begin
e:=StrToFloat(Edit1.Text);
memo1.Clear;
zzz(@e,SizeOf(e));
end;

procedure TForm1.Button3Click(Sender: TObject);
var e:Integer;
begin
e:=StrToInt(Edit1.Text);
memo1.Clear;
zzz(@e,SizeOf(e));
end;

end.


Удачи.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
<Spawn>
Дата 2.8.2004, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


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

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



А можно еще и так smile.gif :

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 f: real;
 i: byte;
begin
 f := 1.5;
 for i := 0 to sizeof(real) - 1 do
   ListBox1.Items.Add(IntToStr(PByte(DWORD(@f) + i)^));
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
mikleN
Дата 3.8.2004, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
А можно и так:

Цитата
А можно еще и так  :

Ну разошлись. smile.gif
Спасибо. Успехов всем и удачи.
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.1062 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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