Конвертер String >> Boolean

Пользовательские блоки для конвертации различных типов данных, а так-же шифрования и дешифровки
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#1

Сообщение Dryundel » 07.10.2021{, 16:36}

Конвертер String >> Boolean
.
String-Boolean.jpg
String-Boolean.jpg (4 КБ) 2695 просмотров
Конвертер_String____Bool_(Code_-_Professional).ubi
(78.66 КБ) 100 скачиваний
.
Конвертирует строковую переменную в Boolean.
При наличии на входе "0" - на выходе логический ноль.
В других случаях логическая единица.
Актуален при работе с MQTT

Расширенная версия блока
.
String-Boolean(расширенный).jpg
String-Boolean(расширенный).jpg (10.55 КБ) 2348 просмотров
String-Boolean(расширенный).flp
(242.08 КБ) 64 скачивания
.
В расширенной версии добавлен параметр выбора логики:
- В случае проверки на ноль, - при "0" на входе, на выходе будет логический ноль,
во всех других случаях на выходе будет логическая единица.
- В случае проверки на единицу, - при "1" на входе, на выходе будет логическая единица,
во всех других случаях на выходе будет логический ноль.

Блок не создает дополнительных переменных и имеет короткий код.

Спасибо всем, кто принял участие в дискуссии.
.
Последний раз редактировалось Dryundel 08.10.2021{, 12:55}, всего редактировалось 1 раз.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Конвертер String >> Boolean

#2

Сообщение Phazz » 07.10.2021{, 18:42}

Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение

Аватара пользователя
Rovki
Полковник
Сообщения: 4873
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Конвертер String >> Boolean

#3

Сообщение Rovki » 07.10.2021{, 18:46}

Phazz писал(а):
07.10.2021{, 18:42}
Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение
Согласен . А то кто то матюкнется и включится обогрев , свет. :smile453:
и не совсем понятно что значит "0" в стринге , слово что ли , или отсутствие символов ? И почему нельзя использовать штатное сравнение строк ?
Электронщик до мозга костей и не только

Naladchik
Капитан
Сообщения: 823
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Конвертер String >> Boolean

#4

Сообщение Naladchik » 07.10.2021{, 18:51}

Dryundel писал(а):
07.10.2021{, 16:36}
При наличии на входе "0" - на выходе логический ноль.
При таком решении я бы проверял на единицу, по мне так логичнее.
(<S> == "1") ? 1 : 0
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#5

Сообщение Dryundel » 07.10.2021{, 18:59}

Phazz писал(а):
07.10.2021{, 18:42}
Наверное лучше будет если 0 это 0 а 1 это 1. Тем более включать 1 при любых данных вообще не очень решение
Не согласен.
Во первых из аналогии if(int Val) { } следует именно такая логика.
Во вторых если на выходе bool то и на "1" тоже буде логическая единица.
В третьих код будет гораздо длиннее.
Есть и ещё несколько мелких ЗА такой вариант.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Конвертер String >> Boolean

#6

Сообщение Phazz » 07.10.2021{, 20:21}

Как раз в логике boolean 1 это 1 или true. А вот 0 это все что не 1. Если например из integer в bool

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#7

Сообщение Dryundel » 07.10.2021{, 21:19}

Phazz писал(а):
07.10.2021{, 20:21}
Как раз в логике boolean 1 это 1 или true. А вот 0 это все что не 1. Если например из integer в bool
Какой смысл переводить integer в bool ?
И в каких случаях по вашему это может пригодиться?

Вероятно Вы не поняли аналогию которую я приводил в пример.
Хорошо, давайте подробнее поясню.

Когда создается условие относительно boolean valBool, то можно написать так:
if ( valBool == 1 )
или так:
if ( valBool )
Результат один и тот же.

В случае с ineger valint тоже можно написать:
if ( valint == 1 )
В этом случае условие выполнится только если valint = 1
А можно написать:
if ( valint )
Тогда условие будет выполняться при любых значениях valint отличных от "0".
Т.е. если речь идет о физическом пине то если:
if ( valint ) {digitalWrite(lPin, 1);}
При любом значении valint - на пине появится высокий уровень и лишь при valint = 0, на пине будет низкий уровень.

Теперь рассмотрим следующий момент:
Предположим мы управляем яркостью светильника через MQTT
А я упоминал что:
Dryundel писал(а):
07.10.2021{, 16:36}
Актуален при работе с MQTT
Ну так вот в этом случае, одной переменной мы можем управлять сразу двумя устройствами - включателем и диммером.
Пришло "50" - включатель включился, диммер выставился на 50%
Пришло "80" - включатель включился, диммер выставился на 80%
Пришло "0" - включатель выключился, что с диммером уже без разницы.
2021-10-07_211633.jpg
.
Вот исходя из этих мелочей и принималось решение задействованной логики.
.

Аватара пользователя
Rovki
Полковник
Сообщения: 4873
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 269
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Конвертер String >> Boolean

#8

Сообщение Rovki » 07.10.2021{, 21:38}

А зачем тогда при шиме =0 выключатель ? Для гальванической развязки ? Обычно делают шим ,у которого при уставке 0 ,на выходе нет импульсов(напряжение 0) , а при 100% нет пауз ( напряжение максимальное) , во всех других случаях длительность импульса пропорциональна уставке( лучше не линейная зависимость для освещения).
Электронщик до мозга костей и не только

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Конвертер String >> Boolean

#9

Сообщение Phazz » 07.10.2021{, 21:53}

Dryundel, Ну чтож хозяин - барин.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#10

Сообщение Dryundel » 07.10.2021{, 21:58}

Rovki писал(а):
07.10.2021{, 21:38}
А зачем тогда при шиме =0 выключатель ?
А затем, что бы обесточить высоковольтную часть прибора. Убедительно? :)
Если да, то дальнейшая часть реплики вероятно отпадает. :)

Мне нравятся все эти правильные вопросы. Всегда рад, аргументированно отвечать за свою работу. :)
Phazz писал(а):
07.10.2021{, 21:53}
Dryundel, Ну чтож хозяин - барин.
Неужели не убедил?
Готов выслушать Ваши аргументы.

alexbonk
Рядовой
Сообщения: 28
Зарегистрирован: 05.10.2021{, 13:29}
Репутация: 1
Имя: алексей

Конвертер String >> Boolean

#11

Сообщение alexbonk » 07.10.2021{, 22:14}

Dryundel писал(а):
07.10.2021{, 21:58}
Какой смысл переводить integer в bool
чтобы в флпрог возможно было подать bool на вход, где требуется именно bool на входе.
И по другому никак))))

или вы можете предложить решение как можно на булеан-вход подать сразу интеджер? думаю не можете.

Отправлено спустя 3 минуты 12 секунд:
Dryundel писал(а):
07.10.2021{, 16:36}
Актуален при работе с MQTT
что мешает слать в этом случае "on/off" например?

Отправлено спустя 2 минуты 29 секунд:
Dryundel писал(а):
07.10.2021{, 22:17}
Ну так вот в этом случае, одной переменной мы можем управлять сразу двумя устройствами - включателем и диммером.
Пришло "50" - включатель включился, диммер выставился на 50%
Пришло "80" - включатель включился, диммер выставился на 80%
Пришло "0" - включатель выключился, что с диммером уже без разницы
это что за экономия? ресурсов? ресурсов чего?

ладно бы еще такие костыли использовать при модбасе или асме...
Но использовать такое в mqtt )))))

более того - если эти циферки будут в стринге - то можно точно также управлять и диммером и устройством))))
Последний раз редактировалось alexbonk 07.10.2021{, 22:35}, всего редактировалось 4 раза.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Конвертер String >> Boolean

#12

Сообщение Phazz » 07.10.2021{, 22:20}

Dryundel, вам уже ответили, случайные данные могут включить например свет

alexbonk
Рядовой
Сообщения: 28
Зарегистрирован: 05.10.2021{, 13:29}
Репутация: 1
Имя: алексей

Конвертер String >> Boolean

#13

Сообщение alexbonk » 07.10.2021{, 22:32}

Phazz писал(а):
07.10.2021{, 22:20}
вам уже ответили, случайные данные могут включить например свет
например в момент ребута.
особенно интересно будет если стринг в это время прилетает из юарта.

логика видать такая:
но ведь там же не 0? нет! а что там? мусор! ок, если там не 0, тогда включаем выход в 1.... :smile9: :D :smile390:

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#14

Сообщение Dryundel » 07.10.2021{, 23:43}

alexbonk писал(а):
07.10.2021{, 22:20}
чтобы в флпрог возможно было подать bool на вход, где требуется именно bool на входе.
И по другому никак))))
Это философская теория. Попробуйте привести реальный пример действий при которых у вас появляется integer который требуется подать на цифровой пин.
alexbonk писал(а):
07.10.2021{, 22:20}
что мешает слать в этом случае "on/off" например?
Зачем? Для чего? Какой смысл если надо 0 /1 ? Ничего не мешает слать 0 или 1.
alexbonk писал(а):
07.10.2021{, 22:20}
это что за экономия? ресурсов? ресурсов чего?
А хоть бы и так. Экономия ресурсов. Трафик String и преобразования весьма ресурсоемкая операция.
Хотя есть и другие тонкости, об этом я писал выше. Будьте чуть внимательней.
Phazz писал(а):
07.10.2021{, 22:20}
Dryundel, вам уже ответили, случайные данные могут включить например свет
alexbonk писал(а):
07.10.2021{, 22:32}
например в момент ребута.
особенно интересно будет если стринг в это время прилетает из юарта.
Какие случайные данные? О чем Вы? С какого ребута?
Вот так случайно с ребута сгенерировался случайный адрес топика и вот так случайно в него закинулся мусор? Что за бред?
Хотя по теории вероятности и обезьяна может написать "Войну и мир" если потратит на это миллиард миллиардов обезьяно-веков.

Господа, вы решили взять числом? Прикольно. :smile171:

alexbonk
Рядовой
Сообщения: 28
Зарегистрирован: 05.10.2021{, 13:29}
Репутация: 1
Имя: алексей

Конвертер String >> Boolean

#15

Сообщение alexbonk » 08.10.2021{, 04:42}

Dryundel писал(а):
07.10.2021{, 21:38}
ГОСПОДА, ВЫ РЕШИЛИ ВЗЯТЬ ЧИСЛОМ?
орут обычно когда уже не могут аргументировать :smile110:
Будьте чуть внимательнее, а то еще изобретете велосипед

Отправлено спустя 3 минуты 36 секунд:
Dryundel писал(а):
08.10.2021{, 04:42}
адрес топика
эк как вас заклинило то на mqtt.
А если чуть шире глянуть?

Отправлено спустя 3 минуты 38 секунд:
Dryundel писал(а):
08.10.2021{, 04:45}
и вот так случайно в него закинулся мусор
именно.
А у нас то что? А у нас же "если не 0, то ставим выход в true".
Вот именно это бред.

Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

Конвертер String >> Boolean

#16

Сообщение rw6cm » 08.10.2021{, 07:20}

Не пойму о чем здесь спор?
Надо сделать так как нам хочется, или как гласит правило С++
По правилу: "Если значение переменной типа bool есть ненулевым, то оно считается равным true.
Если значение переменной типа bool равно 0, то оно считается равным false."
Какие могут быть претензии???
Если хотите добавить в блок дополнительную опцию, достаточно вежливо попросить.
Win10-64, FLProg (portable)

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#17

Сообщение Dryundel » 08.10.2021{, 08:33}

alexbonk писал(а):
08.10.2021{, 04:49}
орут обычно когда уже не могут аргументировать
Будьте чуть внимательнее, а то еще изобретете велосипед
А ни кто и не орет. Заметьте, ни одного восклицательного знака. Меня наоборот радует эта дискуссия. Вы приводите свои аргументы, я свои. Это нормально. В споре рождается истина. По поводу велосипеда - явный перегиб с вашей стороны.
alexbonk писал(а):
08.10.2021{, 04:49}
эк как вас заклинило то на mqtt.
А если чуть шире глянуть?
Я уже просил вас быть чуть внимательней.
Dryundel писал(а):
07.10.2021{, 16:36}
При наличии на входе "0" - на выходе логический ноль.
В других случаях логическая единица.
Актуален при работе с MQTT
alexbonk писал(а):
08.10.2021{, 04:49}
Dryundel писал(а): ↑Сегодня{, 04:45}
и вот так случайно в него закинулся мусор
именно.
А у нас то что? А у нас же "если не 0, то ставим выход в true".
Вот именно это бред.
Не надо выдергивать половину предложения из контекста. Это по меньшей мере не вежливо.
rw6cm писал(а):
08.10.2021{, 07:20}
По правилу: "Если значение переменной типа bool есть ненулевое, то оно считается равным true.
Если значение переменной типа bool равно 0, то оно считается равным false."
Какие могут быть претензии???
Именно из подобных соображений и делалась логика. Спасибо за дополнительный аргумент.
.
А вообще блок создавался не с потока, а для определенных целей, как дидактический материал в преддверии заполнения вот этого топика Топик #6.

.

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

Конвертер String >> Boolean

#18

Сообщение Phazz » 08.10.2021{, 08:52}

И что мешает сделать if else? Как это отразится на мк? Подозреваю что практически никак. Ну если у вас такое отношение к критике (хотя сами очень любите критиковать других), то наверно больше не стоит. Раз вы тут один Д'Артаньян. Пусть будет так.

alexbonk
Рядовой
Сообщения: 28
Зарегистрирован: 05.10.2021{, 13:29}
Репутация: 1
Имя: алексей

Конвертер String >> Boolean

#19

Сообщение alexbonk » 08.10.2021{, 09:18}

Dryundel писал(а):
08.10.2021{, 08:33}
А ни кто и не орет
у вас там выше капслоком же написано.

Отправлено спустя 4 минуты 11 секунд:
Phazz писал(а):
08.10.2021{, 08:33}
И что мешает сделать if else?
только тссс не подсказывайте :)
ну нужен кому-то еще один велосипед :)
ну пусть будет так.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Конвертер String >> Boolean

#20

Сообщение Dryundel » 08.10.2021{, 09:24}

Phazz писал(а):
08.10.2021{, 08:52}
И что мешает сделать if else? Как это отразится на мк? Подозреваю что практически никак.
Вот здесь Вы ошибаетесь.
Если использовать if else, то не получается сделать блок который не создает ни одной дополнительной переменной ни по входу ни по выходу. А теперь представьте что у вас 50 каналов управления. Это +50 переменных String и еще столько же дополнительных boolean. Как Вы думаете, это никак не повлияет на размер проекта? К стати, boolean, если не находится в массиве, занимает 8 бит. Вот такая реальность.
Phazz писал(а):
08.10.2021{, 08:52}
Ну если у вас такое отношение к критике (хотя сами очень любите критиковать других), то наверно больше не стоит.
А какое у меня отношение к критике?
На каждый аргумент я отвечаю контраргументом.
Что не так? А как надо?
Phazz писал(а):
08.10.2021{, 08:52}
Раз вы тут один Д'Артаньян. Пусть будет так.
Ну раз у вас больше нет аргументов, то действительно, пусть будет так. :)

Отправлено спустя 1 минуту 37 секунд:
alexbonk, не стоит переходить на хи-хи. Есть что сказать по делу, давайте будем обсуждать.

Ответить

Вернуться в «Конвертация типов, шифраторы и дешифраторы»