![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Привет всем!!
Очень требуется помощь--есть прибор с которого по RS232 приходят данные "представленные в виде беззнаковых целых чисел или чисел с плавающей точкой(4 байта в формате IEEE754)"--никак не пойму как их перевести чтобы показать в программе--может кто сталкивался?????? Нашел два способа: 1) Код:
const FBuffer: array [0..3] of Byte = ($85, $65, $72, $B0);--то что нужно перевести var i: Integer; s: String[4]; d: Single absolute s; begin for i := 0 to 3 do s[i] := Char(FBuffer[i]); ShowMessage(FloatToStr(d)); end; Код:
res:integer mysinglep:PSingle; mysingle:single; begin res:=StrToInt('$'+Edit1.Text); mysinglep:=@res; mysingle:=mysinglep^; Label2.Caption:=FloatToStr(mysingle); end; Но оба эти варианта дают разные значения и не те что нужно(((((( Последний раз редактировалось Admin, 04.03.2009 в 10:31. |
#2
|
||||
|
||||
![]() даю два варианта... ибо могу ошибаться с расположением байт
1. Вариант Код:
procedure TForm1.Button1Click(Sender: TObject); Const n:single=0; FBuffer: array [0..3] of Byte = ($85, $65, $72, $B0);//--то что нужно перевести begin asm pushad xor ecx,ecx add ecx,3 xor dl,dl mov eax, offset n mov ebx, offset FBuffer @1: mov dl,byte ptr [ebx+ecx] mov byte ptr [eax],dl dec ecx inc eax test ecx,ecx jnz @1; popad end; ShowMessage(FloatToStr(n)); end; 2. вариант Код:
procedure TForm1.Button1Click(Sender: TObject); Const n:single=0; FBuffer: array [0..3] of Byte = ($85, $65, $72, $B0); begin asm pushad xor ecx,ecx add ecx,3 xor dl,dl mov eax, offset n mov ebx, offset FBuffer @1: mov dl,byte ptr [ebx] mov byte ptr [eax],dl dec ecx inc eax inc ebx test ecx,ecx jnz @1; popad end; ShowMessage(FloatToStr(n)); end; Хорошо написанная программа не требует документации ICQ 9-184-668. Последний раз редактировалось Thrasher, 04.03.2009 в 12:38. |
#3
|
|||
|
|||
![]() Спасибо за ответ!!
Ваши варианты дают значения но они не совпадают со значениями моих двух вариантов(кстати в первом варианте нужно байты местами поменять т.е. "B0726585" и тогда значения совпадают в обоих вариантах). Вот что нашел в одном из форумов Цитата:
|