Просмотр полной версии : ОВЕН СП307-Б Float_2_DWord()
r0mashkin0
11.06.2018, 22:38
При использовании следующей конструкции:
DWORD tmp_var;
*(float*)(PSW+326)=100.0;
tmp_var=Float_2_DWord(*(float*)(PSW+326));
*(DWORD*)(PSW+400)=tmp_var;
В ячейке *(DWORD*)(PSW+400) постоянно значение "0". Что не так?
Евгений Кислов
11.06.2018, 22:41
Добрый вечер.
Что именно вы пытаетесь сделать с помощью такой конструкции?
r0mashkin0
11.06.2018, 22:50
Здравствуйте!
Это выжимка из кода, там дополнительные преобразования, которые в тестовом примере не указаны. Только тот участок который не работает:
tmp_var=Float_2_DWord(*(float*)(PSW+326));
По идее пример должен сохранить значение "100" в ячейке PSW[400-401]. Но почему то в данной ячейке только "0x0000".
Евгений Кислов
11.06.2018, 23:01
По идее пример должен сохранить значение "100" в ячейке PSW[400-401]
Нет, не должен. Данные функции не производят конверсию, поэтому в ячейках PSW[400-401] будет 0x42c80000.
Вероятно, вы как раз видите значение младшего из этих регистров (там как раз 0).
https://www.h-schmidt.net/FloatConverter/IEEE754.html
r0mashkin0
11.06.2018, 23:06
Добавил элемент "Дисплей", в свойствах указал DWORD, адрес PSW[400] и формат Hex; и меня там почему то "0x00".
Евгений Кислов
11.06.2018, 23:12
А знаков сколько? Должно быть 8, чтобы увидеть все.
r0mashkin0
11.06.2018, 23:13
Я выставлял 12 знаков. А что далает функция Float_2_DWord()?
Евгений Кислов
11.06.2018, 23:18
У меня ваш пример работает вот так.
В PSW400-401 именно 0x42c80000 - как и должно быть.
r0mashkin0
11.06.2018, 23:22
Загружу Ваш проект попозже, проверю. Повторю вопрос, что делает функция Float_2_DWord(). Если она не производит конвертацию, зачем она вообще нужна?
Евгений Кислов
11.06.2018, 23:31
Чтобы получить последовательность бит, соответствующую float-значению по стандарту IEEE 754.
Я выше кидал ссылку на конвертер. Вот функция делает то же самое.
Если вам надо что-то в стиле 100.0 (FLOAT) ----> 100 (DWORD), то достаточно сделать так:
DWORD tmp_var;
*(float*)(PSW+326)=100.0;
tmp_var=*(float*)(PSW+326);
*(DWORD*)(PSW+400)=tmp_var;
r0mashkin0
11.06.2018, 23:39
Спасибо, еще не подскажете назначение функций Int32_2_DWord() и DWord_2_Int32().
Евгений Кислов
11.06.2018, 23:43
Это псевдонимы для операций приведения типов: (DWORD)(int32_var_name) и (int)(dword_var_name) соответственно.
https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D 0%B8%D0%B5_%D1%82%D0%B8%D0%BF%D0%B0#%D0%9F%D1%80%D 0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D1 %82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B2_%D1%8F%D0%B7%D1 %8B%D0%BA%D0%B5_C
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot