aliacv 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба Кто сталкивался, подскажите аль поделитесь идеями, как красиво сохранить вещественне число побайтно в память, в какую - это уже аппаратный вид реализации. Язык Си. Сам могу предположить: - преобразовать в строковый тип библиотечными функциями и сохранить побайтно. - сделать ассемблерную вставку, а там все сделать. Хотелось бы выслушить ваши предложения, по возможности реализацию. Заранее благодарен за любые старания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wodya 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба Насколько я понял нужно получить доступ к каждому байту вещественного числа. Я делаю так float x; *((BYTE*)(&x)) - первый байт *((BYTE*)(&x)+1) - второй байт *((BYTE*)(&x)+2) - третий байт *((BYTE*)(&x)+3) - четвертый байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackbit 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба Наложи байтовый массив через union. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aliacv 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба >Наложи байтовый массив через 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) - четвертый байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба зачем на 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aliacv 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 (изменено) · Жалоба >зачем на 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 во всю. Изменено 4 апреля, 2007 пользователем Hastja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 122 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба С массивом функциональнее читается.Тогда возьмите такую реализацию: 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]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
topkin 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба "Натяни" на это число байтовый массив через union. Хошь потом по байтам обращайся к переменной, а хочешь к переменной в целом, так будет читабельнее и приятней) ИМХО Коллеги уже примеры написали, повторяться не буду)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 4 апреля, 2007 Опубликовано 4 апреля, 2007 · Жалоба memcpy( куда, &MyFloat, sizeof( float) ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aliacv 0 5 апреля, 2007 Опубликовано 5 апреля, 2007 · Жалоба Спасибо за советы, и бесценный опыт каждого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться