Кто сталкивался, подскажите аль поделитесь идеями, как красиво сохранить вещественне число побайтно в память, в какую - это уже аппаратный вид реализации.
Язык Си.
Сам могу предположить:
- преобразовать в строковый тип библиотечными функциями и сохранить побайтно.
- сделать ассемблерную вставку, а там все сделать.
Хотелось бы выслушить ваши предложения,
по возможности реализацию.
Заранее благодарен за любые старания.
В C для этого существует union. делаешь эквивалентность float и массива из нужного количества байт, а дальше складываешь и вынимаешь с той стороны, с какой надо в данный момент. В строку можно преобразовать, но только если нужен вид, который можно посмотреть глазами, а если просто сохранить - union.
Иль так
Код
float f;
char* p = (char*) &f;
... пользуем p;
Но тут тоже грамотно писать надо чтобы компиллер лишнего не наоптимизировал, т.е. чтобы f в памяти был до того как начнётся использование p.
Или так:
Код
float f = 1.2345;
unsigned char c[4];
c[0] = *(unsigned int*)&f;
c[1] = *(unsigned int*)&f >> 8;
c[2] = *(unsigned int*)&f >> 16;
c[3] = *(unsigned int*)&f >> 24;
ЧЁРТ, СЛУЧАЙНО ВТОРОЙ ТОПИК СОЗДАЛ.
Смотрите кому интереснее первый, он вверху.
Спасибо за ответы.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.