Rob |
Отправлено: 12.02.2006, 09:31 |
|
Не зарегистрирован
|
Может кто встречался с такой задачей.
тип float — 32 разряда, тобишь 4 байта
Есть четыре байта отдельно, т.е. четыре переменных (иль массив).
Нужно перевести эти четыре байта в тип флоат. Т.е. типа соединить.
float = [xx xx xx xx]
где xx — один байт
|
|
GoodWin |
Отправлено: 12.02.2006, 10:36 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 50
|
char b1,b1,b2,b3;
float result;
result = (b1) | (b2>>8) | (b3>>16)|(b4>>32);
Хотя может и не так, не тестировал. Float записывается в формате с плавающей запятой, поэтому может неверно отображать цифру.
Отредактировано GoodWin — 12/02/2006, 10:38 |
|
Rob |
Отправлено: 12.02.2006, 12:05 |
|
Не зарегистрирован
|
Нашел команду
extern PACKAGE void __fastcall Move(const void *Source, void *Dest, int Count);
Может ктонить подскажет, пайдет ли она? и есть ли какие нибудь особенности этой команды?
Мне некогда было еще ее опробовать. |
|
Grigoriy |
Отправлено: 13.02.2006, 02:29 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
CODE |
//.......
unsigned char b1;
//.........
unsigned char b2;
//.........
unsigned char b3;
//.........
unsigned char b4;
//.........
float ed;
//.........
asm{
mov al,b1;
mov byte ptr ed,al;
mov al,b2;
mov byte ptr ed+1,al;
mov al,b3;
mov byte ptr ed+2,al;
mov al,b4;
mov byte ptr ed+3,al;
};
//.......
|
CODE |
//.......
float ed;
//.......
unsigned char b[4];
//.......
asm{
mov eax,dword ptr b;
mov ed,eax;
};
//.......
|
Отредактировано Grigoriy — 13/02/2006, 02:37
|
|
Rius |
Отправлено: 13.02.2006, 07:13 |
|
Мастер участка
Группа: Участник
Сообщений: 321
|
CODE | union {float F;BYTE Byte[4]; long int L;} temp;
temp.Byte[0] = ...;
temp.Byte[1] = ...;
temp.Byte[2] = ...;
temp.Byte[3] = ...;
float result = temp.F;
|
|
|
olegenty |
Отправлено: 13.02.2006, 07:43 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
вот мне тоже вариант Rius первым в голову пришёл.
|
|
** Jonick |
Отправлено: 13.02.2006, 11:57 |
|
Не зарегистрирован
|
Можно вот так:
float *point_a;
float a;
unsigned char buf_float[4]={0,0,0x60,0x40};
point_a=&a;
memcpy(point_a,buf_float,4);
Edit1->Text=a;
в данном примере результат будет 3,5.
Массив сам заполнишь тебе ж известны байты (с младшего до старшего в примере: 1байт — 0; 2байт — 0;3байт — 0х60; 4байт — 0х40;). |
|