Например TDA7294

Форум РадиоКот • Просмотр темы - C++ сравнение данных с заранее неизвестными типами
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 24, 2024 10:54:08

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 51 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пт фев 09, 2018 20:46:59 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
Приветствую, форумчане!
Прошу помощи в идеях. Не могу перешагнуть следующую задачу.
Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта). Тип каждого аргумента может задаваться отдельно, например в enum:
Код:
enum _cmp_type_e {
  _cmp_char =   'C',
  _cmp_ushort = 'U',
  _cmp_short =  'S',
  _cmp_uint =   'T',
  _cmp_int =    'I',
  _cmp_float =  'F'
};

class comparator
{
public:
  uint8_t   arg1[4];
  uint8_t   arg2[4];
  _cmp_type_e arg_type1, arg_type2;
}

Как сравнить arg1 и arg2 ( < = > ?)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пт фев 09, 2018 21:06:58 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
Через кучку if-ов с приведением к нужным типам.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 07:00:25 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта)

Чёто мне это напоминает, вопрос на тему: как и нафига? :roll: Да и как сравнивать тёплое с мягким?
Изображение

Во первых: всё зависит от компилятора, например билдер вас тупо пошлёт далеко и на долго с таким сравнением ибо компилятор настроен так что приравнивание и сравнение разных типов переменных подразумевается как ошибка.

Во вторых: _cmp_char = 'C', это прокатит, а все остальные это не символьные элементы а числовые, и тут всё зависит от компилятора, некоторые позволяют вот такое _cmp_ushort = 'U', при этом данная переменная будет иметь значение кода данного символа исходя из таблицы ASCII. С флоатом такое точно не прокатит.

В третьих: если компилятор не проигнорировал и переварил сравнение разных типов, то он будет тупо сравнивать числовые значения опять же взятый из таблицы ASCII.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 09:07:21 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
Я решил всем аргументам выделить еще по 4 байта и сравнивать их как double
должно получиться


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 10:52:49 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
alex_ писал(а):
_cmp_char = 'C', это прокатит, а все остальные это не символьные элементы а числовые

Все эти элементы - вообще элементы enum, а он имеет, если не ошибаюсь, тип int.

А зачем вообще весь этот геморрой? Сделайте оба аргумента float, а где им присваиваются значения других переменных разных типов просто приводите к float.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 10:57:38 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
да. такая идея и есть. только double нужен из-за размерности беззнаковых 4-байтных


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 12:40:33 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Все эти элементы - вообще элементы enum, а он имеет, если не ошибаюсь, тип int.

Кстати да. Давно не работал с enum.
Цитата:
Сделайте оба аргумента float, а где им присваиваются значения других переменных разных типов просто приводите к float.

Ну тут всё относительно, хотя в целом можно, но вот как сравнивать числовой и знаковый, по коду ASCII? :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 12:44:20 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
в enum лежит только указание типа. не само значение. и enum по умолчанию 8 бит. если не вылезет за пределы или не указать вручную


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 12:55:12 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
alex_ писал(а):
но вот как сравнивать числовой и знаковый, по коду ASCII?

Там вроде только числовые перечислены, знаковые и беззнаковые разной разрядности. Можно привести их все к единому типу - тот же float или double и сравнивать :)
RealHann писал(а):
enum по умолчанию 8 бит

Хм, может я что-то забыл, но вроде бы разрядность enum по умолчанию равна разрядности процессора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 14:03:01 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Там вроде только числовые перечислены

А как же это?
Цитата:
_cmp_char = 'C'


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Сб фев 10, 2018 14:08:05 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
alex_ писал(а):
А как же это?

И это тоже числовая 8-битовая знаковая (если в компиляторе не настроено по умолчанию считать char беззнаковым) :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 12, 2018 12:43:29 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта)

Чёто мне это напоминает, вопрос на тему: как и нафига?


Мне тоже интересно зачем такое надо.

И вопрос топикстартеру. int имеет размер 32бита; можете сказать "навскидку" что выдаст следующий код на экран (Выведет "Да" или "Нет"):
Код:
#include <stdio.h>

int int_x = 2027764539;
float float_x = 2027764539.0;

int main (void)
{
        float float_y = (float) int_x + 5.0;

        printf ("int_x=%d, float_x=%f\n", int_x, float_x);
        printf ("float_y=%f, (float_y > float_x) ==> %s\n", float_y, (float_y > float_x) ? "Да" : "Нет");

        return 0;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 12, 2018 14:46:20 
Грызет канифоль
Аватар пользователя

Карма: -2
Рейтинг сообщений: 43
Зарегистрирован: Ср янв 17, 2018 13:09:14
Сообщений: 250
Рейтинг сообщения: 0
viiv писал(а):
int имеет размер 32бита

Зависит от компилятора и целевого процессора.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 12, 2018 15:09:02 
Грызет канифоль

Карма: 9
Рейтинг сообщений: 80
Зарегистрирован: Чт ноя 06, 2014 13:09:06
Сообщений: 251
Рейтинг сообщения: 0
Зависит от компилятора и целевого процессора.

Это и была конкретизация целевой платформы. Читать так:
Допустим, на конкретной платформе тип int 32-х битный, можете сказать "навскидку" что выдаст следующий код на экран (Выведет "Да" или "Нет")?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 12, 2018 20:36:42 
Первый раз сказал Мяу!

Карма: 7
Рейтинг сообщений: 7
Зарегистрирован: Ср ноя 27, 2013 21:28:40
Сообщений: 29
Откуда: Москва
Рейтинг сообщения: 0
Поскольку оба аргумента занимают 4 байта, достаточно привести оба к uint32_t:
Код:
if( *((uint32_t*)arg1) == *((uint32_t*)arg2) )
{
    /* Enter your code here */
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 19, 2018 21:14:32 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
Поскольку оба аргумента занимают 4 байта, достаточно привести оба к uint32_t:
Код:
if( *((uint32_t*)arg1) == *((uint32_t*)arg2) )
{
    /* Enter your code here */
}

нельзя. поскольку плавающая выглядит в памяти по-другому. и int 123 < float 104.567


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Пн фев 19, 2018 23:55:07 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Создан некий класс, задача которого сравнивать два аргумента конечной длины (4 байта).

Исходная задача, впрочем, так и не озвучена - придётся предполагать общеизвестные сюжеты. Положа руку на сердце, при таком подходе вашему С плюсы и незачем - достаточно структур и функций.
Попробуйте поискать вдохновение в какой-нибудь из реализаций типа данных variant . Объект класса содержит union поле, со всеми поддерживаемыми типами, и enum поле, указывающее на тип содержащихся данных. Оба приватные, доступ и прочие сравнения - через перегруженные операторы.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 13:07:11 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
это один из виртуальных объектов общего конструктора. выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 13:11:55 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
RealHann писал(а):
выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >
сюр какой-то... просто так сравнение чего-то с чем-то делает оператор сравнения. и если для вашего "сравнивателя" надо указывать, что с чем сравнивать, то чем это отличается от тупой записи оператора А>B?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: C++ сравнение данных с заранее неизвестными типами
СообщениеДобавлено: Вт фев 20, 2018 13:15:05 
Открыл глаза

Зарегистрирован: Ср май 14, 2014 15:46:02
Сообщений: 55
Откуда: Харьков
Рейтинг сообщения: 0
RealHann писал(а):
выполняет задачу сравнения. чего с чем неизвестно, пока этого не укажет пользователь в конфигураторе. у объекта два "входа" для аргументов, управление типами этими аргументами и "выход" < = >
сюр какой-то... просто так сравнение чего-то с чем-то делает оператор сравнения. и если для вашего "сравнивателя" надо указывать, что с чем сравнивать, то чем это отличается от тупой записи оператора А>B?

можно, конечно. через уйму if-ов. если у меня 7 возможных типов, то 49 if-ов выглядят тупо. c A>B


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 51 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y