Позвольте мне сначала описать мою ситуацию.
У меня есть список шестнадцатеричных значений, которые называются BaseID. Они выбираются таким образом, чтобы логическое ИЛИ между любым их числом давало вам уникальный идентификатор , который называется FinalID. То есть мои значения BaseID следующие:
BaseID = {0x01, 0x02, 0x04, 0x08, 0x10, ...}
Критическим моментом является то, что я не знаю, сколько BaseIDs у меня будет до запуска программы (я получаю список BaseID после запуска программы, когда она читается из файл), или сколько из общего числа BaseID будет использовано для создания FinalID . Это решается на основе других частей моей программы. Например, ниже приведены два FinalID, которые могут быть в моей программе.
FinalID = (0x01 | 0x04) = 0x05
FinalID = (0x02 | 0x04 | 0x10) = 0x16
Теперь, использование операции OR для любого количества BaseIDs является легкой частью. Моя проблема заключается в том, что мне нужно извлечь из FinalID BaseID, используемые для создания этого FinalID. Поскольку я выбрал BaseID так, чтобы они, после использования операции OR, ВСЕГДА давали мне уникальный FinalID, я знаю, что любой данный FinalID создается с использованием определенного набора BaseID. Обратите внимание, что FinalID может быть создан с использованием только одного BaseID, что эквивалентно FinalID = (BaseID | 0x00).
Я знаю, что мне нужно сделать, чтобы извлечь BaseID, используемые для создания любого конкретного FinalID; Мне нужно получить полный список задействованных BaseID, а затем использовать оператор ИЛИ для каждого сочетания элементов, чтобы выяснить, дает ли какая комбинация конкретный FinalID.
Однако мне трудно преобразовать эту логику в программу. Я использую C # с .NET 3.5 Framework. Любые предложения / идеи будут очень цениться. Пример кода высоко ценится.
Заранее спасибо!