Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.01;
Скачать: CL | DM;

Вниз

Помогите разобраться с протоколом...   Найти похожие ветки 

 
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);

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



Страницы: 1 вся ветка

Текущий архив: 2002.04.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
3-75
SerKom
2002-03-07 18:20
2002.04.01
Почему для базы на IB (SQL Dialect 3) при использовании типа полей Date или Time


1-173
deleon
2002-03-19 16:15
2002.04.01
Как из плагина вставлять свои TMenuItem в любую менюшку программы ?


14-285
vic_vm
2002-02-18 14:29
2002.04.01
Вопрос к lel


1-201
tovSuhov
2002-03-20 10:25
2002.04.01
Вот еще такой вопрос...


1-234
Kurt
2002-03-20 19:00
2002.04.01
Люди помогите плиз! Как сделать чтоб у окна был BorderStyle был bsDialog, но чтоб он имел возможность своарачиваться???