Как получить такой двоичный код? Добрый день,
есть часть массива
[7] => 11100011
[8] => 10000000
//скорее всего 9 ячейка не играет роли
[9] => 10000000
из этих 3x ячеек(еще возможно что из 2х - 7 и 8), каким-то мне неизвестным способом формируется вот такое значени - 1001111101100011
Возможно у кого-то есть идеи как это может происходить?
Единственное, что я вижу тут - первые 7 бит из результата равняются первым 7ми битам из 7й ячейки...
Благодарен за любую помощь, возможно совет в какую сторону копать.Немного предыстории:
Есть карточная игра и её разработчики придумали недавно выпустили патч, в котором можно колоду сконвертировать в строку и например скинуть другу, друг копирует и в игре вставив этот код - получает готовую колоду, т.е. руками он не выбирает карты. В строке хранится информация про формат, какие карты туда входят и в каком количестве и еще немного ненужной инфы, так вот код примерно выглядит так AAECAf0GCpHHAuO+ArEI5MIClMcCMJG8AsQI68IC5QcKvLYC9wTUswKnCLSsAtkH4wXQBM4HwggA
Мне нужно получить ID карт которые вшиты в этот строку.
Вначале я эту строку перегоняю через base64_decode получаю строку из ASCII символов, дальше каждый символ в цикле перебираю и из символа получаю ASCII код(00000010 и тп), в зависимости от символа.
И отсюда я уже взял часть массива.
Дело в том что раньше код отлично работал, если например в массиве присутствовали слудеющие 3 байта:
10010001
11000111
00000010
методом проб и ошибок я выявил, что чтобы получить ID карты нужно удалить 7й бит(если он равен 1) и пристыковать следующий, если и у него 7й бит = 1 - удаляется 7й бит и пристыковывается следующий и так пока 7й бит не будет равен 0 - в итоге имеем 0000001010001110010001, если это дело перевести с двоичного в десятичное получается 41873, что как-раз и является ID одной из карт в колоде, и такая магия проделывается по очереди с каждым элементом массива. Все работало до того момента пока а колоду не вошли карты из одного нового комплекта. Отсюда и эти 2 значения
11100011
10000000
Методом который я описал выше, скрипт просто видит 10000000 вырезает 7й бит и берет следующий элемент и дальше все идет коту под хвост.
Метод хранения придумывали разработчики игры, не я. Мне это нужно понять, чтобы по данному коду можно было получить колоду из n количества карт.

21 Авг 2019 в 06:27
210 +1
0
Ответы
1

На основании вашего описания, предположу, что для получения идентификатора карты из последовательности битов вам нужно применить некоторую логику обработки битов, основываясь на значении седьмого бита.

Одним из способов можно быть следующий:

Преобразовать каждый байт из исходного массива в последовательность битов.Для каждого байта проверить значение седьмого бита. Если он равен 1, удалить этот бит и взять следующий байт для продолжения последовательности.Продолжать этот процесс до тех пор, пока значение седьмого бита не будет равно 0.Собрать все полученные биты в новую последовательность и преобразовать ее обратно в десятичное число, которое и будет идентификатором карты.

Это только один из возможных способов обработки данных. Возможно, потребуется дополнительное исследование и эксперименты для определения конкретного алгоритма, который применяется разработчиками игры. Надеюсь, это поможет вам в решении проблемы. Если у вас есть дополнительные вопросы или уточнения, пожалуйста, не стесняйтесь задать их.

20 Апр 2024 в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир