Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 41

Тема: DWORD_TO_REAL

  1. #1

    По умолчанию DWORD_TO_REAL

    Мне нужно перевести 4 байта (16#40 00 00 00) в формат REAL
    Так как порядок следования байт в REAL для СПК перепутан, пробую так:

    dword_to_real(16#4000)

    По идее это должно мне дать значение real равное 2.0 , но это не так.
    Получается что dword это такой же числовой тип как и uint!
    Спрашивается, зачем нужны два одинаковых типа?

    И существует ли в ST оператор, который может нормально перевести 16#4000 в real = 2.0 ?
    Изображения Изображения
    • Тип файла: jpg dword.jpg (11.5 Кб, Просмотров: 102)

  2. #2

    По умолчанию

    По сути, мне нужно решить задачу: корректно перевести переменную типа dword в real не используя память данных М в языке ST.
    Это вообще реально?

  3. #3
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    На форуме уже не раз выкладывался пример получения переменной типа REAL в СПК. Просто оператора нет, нужно написать функцию перестановки байт.

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от @ND Посмотреть сообщение
    И существует ли в ST оператор, который может нормально перевести 16#4000 в real = 2.0 ?
    только через указатель, либо самому написать функцию
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5

    По умолчанию

    Цитата Сообщение от _Mikhail Посмотреть сообщение
    На форуме уже не раз выкладывался пример получения переменной типа REAL в СПК. Просто оператора нет, нужно написать функцию перестановки байт.
    Байты уже переставлены. Мне реал получить надо.

  6. #6

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    только через указатель, либо самому написать функцию
    Разве возможно написать такую функцию на ST?
    Где она будет хранить значения при перекидывании байт? (М память не предлагать)
    Функциональный блок тут конечно справится. Но это как из пушки по воробьям.
    Последний раз редактировалось @ND; 07.08.2015 в 07:32.

  7. #7

    По умолчанию

    Почему в других системах dword_to_real нормально работает, а в КДС так убого?

  8. #8

    По умолчанию

    Даже документации по dword_to_real нет.

  9. #9
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Получается что dword это такой же числовой тип как и uint!
    По стандарту он не числовой ни разу, но ощущение, что на это забили вообще все.

    DWORD_TO_REAL делает как раз числовое преобразование. Вам нужно реинтерпретировать байты через указатель:

    d: DWORD;
    ptrReal: POINTER TO REAL;
    r: REAL;

    ptrReal := ADR(d);
    r := ptrReal^;

    Будь у меня свой кодесис, я бы запретил на фиг арифметику и неявные преобразования в число для типов, которые имеют в своём названии WORD, чтобы вот этой путаницы не возникало. И сделал бы операторы вроде DWORD_AS_REAL, чтобы обходиться без указателей.

  10. #10
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от @ND Посмотреть сообщение
    Разве возможно написать такую функцию на ST?
    Где она будет хранить значения при перекидывании байт?
    Функциональный блок тут конечно справится. Но это как из пушки по воробьям.
    это делается за один цикл и памяти отведенной для этого в функции вполне хватает.

    В каких системах есть такой перевод, поделитесь?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 1 из 5 123 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •