При использовании следующей конструкции:
В ячейке *(DWORD*)(PSW+400) постоянно значение "0". Что не так?Код: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". Что не так?Код:DWORD tmp_var;
*(float*)(PSW+326)=100.0;
tmp_var=Float_2_DWord(*(float*)(PSW+326));
*(DWORD*)(PSW+400)=tmp_var;
Добрый вечер.
Что именно вы пытаетесь сделать с помощью такой конструкции?
Здравствуйте!
Это выжимка из кода, там дополнительные преобразования, которые в тестовом примере не указаны. Только тот участок который не работает:
По идее пример должен сохранить значение "100" в ячейке PSW[400-401]. Но почему то в данной ячейке только "0x0000".Код:tmp_var=Float_2_DWord(*(float*)(PSW+326));
Нет, не должен. Данные функции не производят конверсию, поэтому в ячейках PSW[400-401] будет 0x42c80000.Цитата:
По идее пример должен сохранить значение "100" в ячейке PSW[400-401]
Вероятно, вы как раз видите значение младшего из этих регистров (там как раз 0).
https://www.h-schmidt.net/FloatConverter/IEEE754.html
Добавил элемент "Дисплей", в свойствах указал DWORD, адрес PSW[400] и формат Hex; и меня там почему то "0x00".
А знаков сколько? Должно быть 8, чтобы увидеть все.
Я выставлял 12 знаков. А что далает функция Float_2_DWord()?
У меня ваш пример работает вот так.
В PSW400-401 именно 0x42c80000 - как и должно быть.
Загружу Ваш проект попозже, проверю. Повторю вопрос, что делает функция Float_2_DWord(). Если она не производит конвертацию, зачем она вообще нужна?
Чтобы получить последовательность бит, соответствующую 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;