| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > HexToSingle |
| Автор: sevlad 10.1.2007, 23:18 |
| столкнулся с проблемой, что при чтении из файла в массив типа Char или Byte и последующей его обработкой необходимо преобразовать 4 последовательных байта в single. Бъюсь 4 дня. Знаю, что должно быть просто но ... |
| Автор: Snowy 10.1.2007, 23:40 | ||
Добавлено @ 23:42 Это из-за выравнивания. Чтобы его не было, нужно использовать packed record. |
| Автор: Beltar 11.1.2007, 09:40 | ||
| 2 Snowy: Хм-м. А что происходит если к байту применить сдвиг на 16 или 24 бит? Однажды мне понадобилось слеплять Float aka Single из приходящего с девайса потока байтов по протоколу ModBus в котором вещественное представляется с перестановкой байтов. Кажется это формат процессоров Motorola. Я не мудрствуя лукаво сделал так.
|
| Автор: Snowy 11.1.2007, 11:20 | ||
| Тоже вариант. Но наиболее быстрым тут будет вариантный packed record
|
| Автор: Beltar 11.1.2007, 12:42 | ||
| Это да, у меня немного более сложный случай, кстати, мой тогдашний начальник такую задачу в свое время решал на ассемблере. Кстати, здесь старинный китайский вопрос может возникнуть "анахуа?" Если байты уже лежат как нужно, то что мешает:
Тут надо сам алгоритм смотреть, вдруг там можно и без массива обойтись. |
| Автор: sevlad 12.1.2007, 20:42 | ||
| Спасибо всем за помощь. В итоге получилось так:
Хотелось бы читать все в динамический массив, но пока увы. Отдельное спасибо Snowy Совет про paked record оказался правильным. Итог: время обработки 200 метрового файла по одному параметру составляет 7 секунд. Приемлимо. |