![]() |
|
#1
|
|||
|
|||
![]() Добрый вечер, у меня есть функция, которая переводит из двоичной (типа интеджер) в шестнадцатиричную (строковую) систему счисления
вот код этой функции Код:
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
|
||||
|
||||
![]() а как в шестнадцатиричном формате должно выглядеть, например, 15.5869 (тип Real)? конечно если речь идет не об этом
Последний раз редактировалось cotseec, 29.03.2012 в 21:14. |
#3
|
|||
|
|||
![]() Вообще мне надо перевести переменную типа real в переменную тип byte, есть какая - нибудь функция для такого перевода?
|
#4
|
||||
|
||||
![]() Первое что пришло в голову:
Код:
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
|
||||
|
||||
![]() Цитата:
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
![]() Цитата:
Ситуация следующая), в программе вводится число типа real и его надо передать на микроконтроллер, на микроконтроллер можно передать только типа byte. Если число типа integer, то я пользовался функцией описанной мной в первом сообщении и далее с помощью другой функции переводил в тип byte. |
#7
|
||||
|
||||
![]() Код:
var s : Single; b : Byte; begin s := 123.123; b := Trunc(s); Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#8
|
||||
|
||||
![]() либо передавать как набор байт - отдельно целую и дробную части (т.е. несколько чисел типа integer, а это вы умеете) либо воспользоваться машинным представлением чисел с плавающей запятой, и уже как-то идентифицировать в микроконтроллере что ему пришло - целое или с плавающей запятой.........., если действительно необходимо микроконтроллеру работать с плавающей запятой
![]() |