Как получить такой двоичный код? Добрый день,
есть часть массива
[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
188 +1
0
Ответы
1

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

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

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

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

20 Апр в 13:18
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 493 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир