Главная страница
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.012 c
3-24
de
2002-03-06 14:52
2002.04.01
Как сделать выпадающий список в DBGridEh?


3-64
Cyberbob
2002-03-09 20:48
2002.04.01
Как свою БД сделать-например


6-275
Satrap
2002-01-18 16:04
2002.04.01
Обработка искл. ситуаций в сокетах


1-230
alexts
2002-03-20 15:21
2002.04.01
Проблемы с MDI и DLL


7-324
Nomad
2001-12-29 15:14
2002.04.01
Как в NT-ях разрешить программе редактировать реестр текущего пользователя?