Задать вопрос

Как получить такой двоичный код?

Добрый день,
есть часть массива

[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 количества карт.
  • Вопрос задан
  • 606 просмотров
Подписаться 4 Оценить 5 комментариев
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Программирование
software engineer
Посмотрите, совпадает ли алгоритм разработчиков с созданием символов в UTF-8

В таком виде это совсем другой вопрос.

Посмотрите алгоритм формирования UTF-8 символов, думаю это все оттуда:

Подготовить старшие биты первого октета (0xxxxxxx для одного октета, 110xxxxx - два, 1110xxxx - три и т.д.). Для остальных октетов два старших бита равны 10 (10xxxxxx).
Количество байт Значащих бит Первый байт Шаблон полностью
1 7 0xxxxxxx 0xxxxxxx
2 11 110xxxxx 110xxxxx 10xxxxxx
3 16 1110xxxx 1110xxxx 10xxxxxx 10xxxxxx
4 21 11110xxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 26 111110xx 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6 31 1111110x 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы