|
|
||||||
Определение изменения бит в байте27.08.2021, 19:18. Показов 11363. Ответов 128
Всем ку!
Возник вопрос по оптимальному методу определения изменившихся бит в байте. Два байта прилетают по сети и имеют следующий вид: Суть в следующем (на примере байта Е8): 0-й, 3-й и 6-й биты "работы", говорят о включенном или выключенном состоянии участка. 1-й, 2-й, 4-й, 5-й, ... биты - определения сторон (L/R) соотв. участков. Они всегда находятся в одном из двух состояний: 01 либо 10. Состояний 00 или 11 не бывает. Так вот, в идеале, требуется определить момент смены состояний, допустим с 01 на 10, при установленном бите "работы". Если бит "работы" не установлен, то изменения состояний бит сторон пофигу. Пока я делаю это так (без учета бита "работы"):
Можно ли как-то сделать иначе?
0
|
||||||
| 27.08.2021, 19:18 | |
|
Ответы с готовыми решениями:
128
Поменять порядок бит в байте
В байте не восемь бит. |
|
|
||
| 29.08.2021, 11:05 [ТС] | ||
|
Элд Хасп, в общем я прихожу к выводу: отказаться от byte, слепив их в ushort и работать с ним.
Позже изложу суть идеи. И, кстати, проверять на изменение инф. бит я буду только те участки, которые активны в данный момент. В цикле. Добавлено через 36 секунд
0
|
||
|
Модератор
|
|||
| 29.08.2021, 11:15 | |||
|
Всё зависит от тога как вам дальше надо использовать эту полученную информацию. Если нужно передавать индекс линии и её состояние, то для подсчёта индекса понадобится цикл. Если же нужно просто передать позиции отслеживаемых изменившихся бит, то циклы уже не нужны. Для примера. Было 101_101. Стало 011_101. Что вам надо передать? Если 010_000, то циклы не нужны.
1
|
|||
|
Модератор
|
|||
| 29.08.2021, 11:55 | |||
|
Если из Было 101_101. Стало 011_101. надо получить 010_000, то циклы не нужны.То есть если при дальнейшей обработке этот индекс надо опять "раскрывать" до позиции, то лучше сразу хранить позицию. И тогда циклы не будут нужны.
0
|
|||
|
|
|||||||||||||||||||||||||||||||
| 29.08.2021, 12:48 [ТС] | |||||||||||||||||||||||||||||||
|
Элд Хасп, может быть и так. Давайте я сначала приведу свою идею, а там посмотрим что можно сделать.
Добавлено через 8 минут Начало такое:
Добавлено через 54 секунды В данном случае в работе все узлы:
Но откажемся от глобального определения активных сторон. Уберем:
P.S. И вот этот код уже упрощение того, что я наворотил пол года назад, используя byte.
0
|
|||||||||||||||||||||||||||||||
|
Модератор
|
||||||
| 29.08.2021, 12:54 | ||||||
1
|
||||||
|
|
||||
| 29.08.2021, 13:00 [ТС] | ||||
|
Добавлено через 1 минуту newBits.Добавлено через 1 минуту
0
|
||||
|
Модератор
|
|||||||
| 29.08.2021, 13:07 | |||||||
|
Получение строкового представления:
Что вам дальше нужно для работы: индекс бита или его позиция? Это же определяется принимающей стороной. И я этого не знаю.
0
|
|||||||
|
|
||||
| 29.08.2021, 13:09 [ТС] | ||||
|
Добавлено через 1 минуту
0
|
||||
|
|
|||
| 29.08.2021, 13:17 [ТС] | |||
|
Возьмем 8 бит (байт), например такие: 00010011. Согласно ему, я отправляю в трубу его же, и "там где-то" включаются выхода, равные "1". Остальные включенные гаснут. Когда изменится приходящий байт, например на такой: 00100101, то в соответствие ему, нужно погасить включенные ранее выхода и включить другие, которые стали равны "1". Эти операции происходят не сразу по получении новой пачки, а по команде 1С. Но к приходу этой команды от 1С, я уже знаю какие раскаты активны и какие стороны в данной момент в работе.Добавлено через 2 минуты
0
|
|||
|
Модератор
|
|||
| 29.08.2021, 13:19 | |||
|
Или у всех сторон один общий управляющий порт как и у принимающего? Вот для включения "второй стороны R" Что надо передать? В общий порт "0b_010_000" или в порт второй стороны "0b_01"? Добавлено через 1 минуту
0
|
|||
|
|
||
| 29.08.2021, 13:22 [ТС] | ||
|
Почему я хочу отловить момент изменения сторон:
потому что 1С-ники иногда халтурят и их алгоритм не сразу удаляет файлы после переключения сторон из общей папки. Это критично. Поэтому, узнав, какая сторона изменилась, я хочу удалять эти файлы сам File.Delete().Добавлено через 1 минуту
0
|
||
|
|
||||
| 29.08.2021, 13:30 [ТС] | ||||
|
Добавлено через 46 секунд Именно. Добавлено через 1 минуту
0
|
||||
|
Модератор
|
|||
| 29.08.2021, 13:46 | |||
|
Я никак не могу получить нужного мене ответа. Возможно неверно объясняю что мне нужно. Вы пишите 011_011 и new 101_101.Вы не может это передать как 101_101 или 100_100.Вам нужно передавать это побитно.Но что означает побитно?Это передача индекса изменившего бита и его состояния? Но тогда как вы совмещаете эту информацию в передаваемом байте? Или вам нужно передавать байты в котором только по одному установленному биту? То есть вместо 100_100 надо передать 000_100, 100_000.
0
|
|||
|
|
|||||||||||||||
| 29.08.2021, 14:08 [ТС] | |||||||||||||||
|
Элд Хасп, а
Добавлено через 3 минуты ![]() Добавлено через 4 минуты Добавлено через 9 минут Элд Хасп, я пока остановился на вот этом вашем варианте. Подумаю, как приспособить.
0
|
|||||||||||||||
|
Модератор
|
|||||||||
| 29.08.2021, 14:16 | |||||||||
|
Значит вы отправляете 4 байта. Каких? 000_010, 000_100, 010_000, 100_000 ?Разве он не это делает? Это будет:
0
|
|||||||||
|
|
||||
| 29.08.2021, 14:30 [ТС] | ||||
|
Элд Хасп, похоже я понял в чем причина недопонимания. Скорее всего в механизме отправки, т.е. что в каком виде передается и куда записывается.
Поясню: Есть такая функция SendBit(byte, position). Подставим значения: SendBit(0b00110011, 4).В удаленный контроллер отправится 4-й бит из байта со значением "1". И(!) запишется в 4-й выход(!) контроллера, т.е. его включит. Если мы изменим position на 3, то произойдет передача 3-го бита, который в данном случае == 0, и 3-й выход сбросится (отключится). Наверное, теперь должно быть яснее. Добавлено через 3 минуты SendByte), но она почему-то не работает (контроллер отклоняет ее с кодом ошибки). Сама же посылка (TCP) длиной от 4 до 16 байт.Добавлено через 1 минуту Добавлено через 2 минуты
0
|
||||
| 29.08.2021, 14:30 | |
|
Изменить рандомный бит в байте Порядок байт в слове и бит в байте
последовательность инструкций для обнуления трех старших бит регистра DH, без изменения остальных бит Есть ли функция которая может определить сколько бит в байте? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|