![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Hukuma |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
Здравствуйте!
Тема похожа на эту http://forum.vingrad.ru/topic-64014.html Исходные данные - есть последовательность из 4ых байтов - это части числа в формате float. Т.е. знак экспоненты,экспонент, мантисса. нужно из этих 4ых байтов собрать число в формате float.. я понял, что это можно сделать, использую побитовые операции, это как описано в теме, на которую я сослался.. а вопрос такой - а нельзя это сделать проще? Очень туго въезжаю в формат IEEE754. Или нет других путей? |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
как то так.... Это сообщение отредактировал(а) UniBomb - 17.4.2009, 15:05 |
|||
|
||||
| Hukuma |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 18.2.2009 Репутация: нет Всего: нет |
Unibomb,спасибо большое..интересный вариант, понравилс очень, сейчас попробую
|
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
только, наверное, порядок байт в слове еще нужно учитывать
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Жесть какая, 4 байта копировать в 4 байта циклом %) return (float)data[0]; Это сообщение отредактировал(а) GoldFinch - 17.4.2009, 15:29 |
|||
|
||||
| UniBomb |
|
|||
|
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
А теперь спроси у компилятора (у лбого), что он думает по поводу этой строчки. Компилятор ответит, что результатом будет содержимое этой переменной (data[0]), пробразованное во float. А копировать ничего не придётся, если массив data объявить в составе объединения. |
|||
|
||||
| InvalidProperty |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: нет Всего: 9 |
это истина, ибо union это не какой-то там struct. Его поля одинаковой длины ссылаются на одно и то же значение -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
UniBomb, ок, return *(float*)data;
|
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 11 Всего: 36 |
GoldFinch,
Жесть какая, 4 байта копировать в 4 байта циклом %) return (float)data[0]; лучше жесть, чем неработающая кривизна ЖлолЖ |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
Это сообщение отредактировал(а) zim22 - 18.4.2009, 07:50 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Rififi, объясни, зачем читать через пост, а не все посты подряд?
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
zim22, может все таки лучше через reinterpret_cast имхо.
по сабжу конечно объединения хороши, но и memcpy тоже не плохо. |
|||
|
||||
| Rickert |
|
|||
|
Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
А memcpy никто не пробовал?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 24 Всего: 69 |
я сначала сделал вариант с reinterpret_cast, но потом вспомнил, что это опасные преобразования. а static_cast - безопаснее. тем более с ним работает тоже |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 2 Всего: 306 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |