Кто сталкивался, подскажите аль поделитесь идеями, как красиво сохранить вещественне число побайтно в память, в какую - это уже аппаратный вид реализации.
Язык Си.
Сам могу предположить:
- преобразовать в строковый тип библиотечными функциями и сохранить побайтно.
- сделать ассемблерную вставку, а там все сделать.
Хотелось бы выслушить ваши предложения,
по возможности реализацию.
Заранее благодарен за любые старания.
Насколько я понял нужно получить доступ к каждому байту вещественного числа.
Я делаю так
float x;
*((BYTE*)(&x)) - первый байт
*((BYTE*)(&x)+1) - второй байт
*((BYTE*)(&x)+2) - третий байт
*((BYTE*)(&x)+3) - четвертый байт
blackbit
Apr 4 2007, 10:42
Наложи байтовый массив через union.
>Наложи байтовый массив через union.
В принципе можно обьеденить одинакового размера две переменные, например
typedef union
{ float f_32; // 32bit
unsigned int i_32; // 32bit
} foo_t;
Будет же что и массив
float x;
*((BYTE*)(&x)) - первый байт
*((BYTE*)(&x)+1) - второй байт
*((BYTE*)(&x)+2) - третий байт
*((BYTE*)(&x)+3) - четвертый байт
зачем на int ?
Код
union
{
float f;
struct
{
char b0;
char b1;
char b2;
char b3;
};
}
f = 3.14145926;
printf ("%d %d %d %d", b0, b1, b2, b3);
>зачем на int ?
Если int 32 бита(4 байта), например компилятор IAR, RealView, то
такое:
union {
float f;
struct {
char b0;
char b1;
char b2;
char b3;
};
}
И такеое:
typedef union {
float f;
unsigned int b;
} foo_t;
будут равнозначны.
С массивом функциональнее читается.
Уже работает на AT45 во всю.
Сергей Борщ
Apr 4 2007, 14:46
Цитата(Hastja @ Apr 4 2007, 11:21)

С массивом функциональнее читается.
Тогда возьмите такую реализацию:
Код
union
{
float f;
uint8_t char b[sizeof(f)];
};
или
union
{
float f;
uint8_t char b[];
};
printf ("%d %d %d %d", b[0], b[1], b[2], b[3]);
"Натяни" на это число байтовый массив через union. Хошь потом по байтам обращайся к переменной, а хочешь к переменной в целом, так будет читабельнее и приятней) ИМХО
Коллеги уже примеры написали, повторяться не буду))
defunct
Apr 4 2007, 19:15
memcpy( куда, &MyFloat, sizeof( float) );
Спасибо за советы, и бесценный опыт каждого!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.