Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.008 c
1-229
masterdim
2002-03-20 15:20
2002.04.01
изменение свойства у компонента TButton


3-1
volodya_
2002-03-05 09:17
2002.04.01
Как в Qreport-е посчитать сумму значений по каждой странице?


6-265
Malder
2002-01-19 13:39
2002.04.01
Перехват Socket соединения


1-120
dr_neo
2002-03-21 17:45
2002.04.01
Взлом программ! ! !


1-192
Yakudza
2002-03-17 20:19
2002.04.01
ChekListBox и Record




   Наверх