Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Вниз

Помогите разобраться с протоколом... 


dimonf   (2002-03-20 21:35) [0]

Господа программисты помогите чайнику :)
Я никак не могу разобраться с протоколом.
У меня есть данные в виде: 4D E6 4A
Где:
4D - Старший байт - порядок числа со смещение 40h.
Если старший бит равен единице, то число отрицательное
E6 - Средний байт - старший байт приведенной мантиссы
4A - Младший байт - младший байт приведенной мантиссы.

Н.п. 40h 80h 00h равно 0.5
41h 80h 00h равно 1

По протоколу 4D E6 4A это 7369,25 все правильно.
Но 50 A0 DF должно получиться 41183.0 а у меня получается -24353
Почем такие глюки или я чего ни будь, не понимаю?
Вот мой код преобразования:

type
TByte=array[1..3] of byte;

function TMainForm.GetFloat(a:TByte):single;
var tmpA:word;
tmpAA:array[1..2] of byte absolute tmpA;
shift:byte;
begin
tmpAA[1] := a[3];
tmpAA[2] := a[2];
shift:=a[1]-$40;
IF shift=$00 then result:=tmpA/$10000
else result:=(tmpA shl shift)/$10000;
end;

var A : TByte;

A[1] := [$50];
A[2] := [$A0];
A[3] := [$DF];



MBo   (2002-03-21 08:19) [1]

function GetFloat(a:TByte):single;
var tmp:Cardinal;
Sign,shift:byte;
begin
Tmp:=((a[2] shl 8) or a[3]);
Sign:=a[1] shr 7;
shift:=a[1]-$40;
result:=(tmp shl shift)/$10000;
if Sign=1 then result:=-Result;
end;



MBo   (2002-03-21 08:32) [2]

в принципе, и переменные локальные не нужны, но с ними яснее

result:=((Integer(a[1]<$80) shl 1)-1)*
(Cardinal(((a[2] shl 8) or a[3]) shl (a[1]-$40))/$10000);

>Если старший бит равен единице, то число отрицательное
неясно - все число или порядок?




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.72 MB
Время: 0.025 c
1-120             dr_neo                2002-03-21 17:45  2002.04.01  
Взлом программ! ! !


1-167             VCL                   2002-03-18 22:12  2002.04.01  
Помогите разобраться с RichEdit.


14-307            dr0Ne64               2002-02-17 22:07  2002.04.01  
Ищу поклонников Microsoft


7-335             Filat                 2001-12-19 15:45  2002.04.01  
Как переделать или втавить программу с ASM на Дельфи - цифровой вольтметр.


1-157             Alex Dobrushin        2002-03-18 14:57  2002.04.01  
Как показать и распечатать PDF файл?