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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2012, 20:34
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию Функция

Добрый вечер, у меня есть функция, которая переводит из двоичной (типа интеджер) в шестнадцатиричную (строковую) систему счисления
вот код этой функции

Код:
FUNCTION DEC2HEX(DEC: LONGINT): STRING;   {из двоичной (целочисленного типа) в шестнадцатиричную (строкового типа)}
CONST
HEXDigts: STRING[16] = '0123456789ABCDEF';
VAR
HEX : STRING;
I, J: LONGINT;
BEGIN
  IF DEC = 0 THEN HEX := '0'
  ELSE
    BEGIN
      HEX := '';
      I := 0;
      WHILE (1 SHL ((I + 1) * 4)) <=DEC DO I := I + 1;
      { 16^N = 2^(N * 4) }
      { (1 SHL ((I + 1) * 4)) = 16^(I + 1) }
      FOR J := 0 TO I DO
        BEGIN
          HEX := HEX + HEXDigts[(DEC SHR ((I - J) * 4)) + 1];
          { (DEC SHR ((I - J) * 4)) = DEC DIV 16^(I - J) }
          DEC := DEC AND ((1 SHL ((I - J) * 4)) - 1);
          { DEC AND ((1 SHL ((I - J) * 4)) - 1) = DEC MOD 16^(I - J) }
        END;
    END;
  DEC2HEX := HEX;
END;

мне нужна такая же функция, только чтобы перевод осуществлялся не из типа integer, а из типа real. Помогите пожалуйста, а то моего образования программиста не хватает для создания такой функции.
Ответить с цитированием
  #2  
Старый 29.03.2012, 21:10
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

а как в шестнадцатиричном формате должно выглядеть, например, 15.5869 (тип Real)? конечно если речь идет не об этом

Последний раз редактировалось cotseec, 29.03.2012 в 21:14.
Ответить с цитированием
  #3  
Старый 29.03.2012, 22:05
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Вообще мне надо перевести переменную типа real в переменную тип byte, есть какая - нибудь функция для такого перевода?
Ответить с цитированием
  #4  
Старый 29.03.2012, 22:07
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Первое что пришло в голову:
Код:
Function FloatToHex(A: Real): String;
Var
 TS: TMemoryStream;
 i: Integer;
 b: Byte;
begin
 Result:= '';
 TS:= TMemoryStream.Create;
 TS.Write(A, SizeOf(A));
 TS.Position:= 0;
 For i:= 0 To TS.Size - 1 Do
  begin
   TS.Read(b, 1);
   Result:= IntToHex(b, 2) + Result;
  end;
 TS.Free;
end;
__________________
If end Then begin;
Ответить с цитированием
  #5  
Старый 29.03.2012, 22:09
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от AnderoN
Вообще мне надо перевести переменную типа real в переменную тип byte...
Это как?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #6  
Старый 29.03.2012, 22:23
AnderoN AnderoN вне форума
Прохожий
 
Регистрация: 18.02.2011
Сообщения: 31
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Это как?


Ситуация следующая), в программе вводится число типа real и его надо передать на микроконтроллер, на микроконтроллер можно передать только типа byte. Если число типа integer, то я пользовался функцией описанной мной в первом сообщении и далее с помощью другой функции переводил в тип byte.
Ответить с цитированием
  #7  
Старый 29.03.2012, 22:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
var
  s  : Single;
  b  : Byte;
begin
  s := 123.123;
  b := Trunc(s);
Самое простое.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 29.03.2012, 22:59
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

либо передавать как набор байт - отдельно целую и дробную части (т.е. несколько чисел типа integer, а это вы умеете) либо воспользоваться машинным представлением чисел с плавающей запятой, и уже как-то идентифицировать в микроконтроллере что ему пришло - целое или с плавающей запятой.........., если действительно необходимо микроконтроллеру работать с плавающей запятой , иначе, как уже напсиано выше
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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