[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 количества карт.
Как это в вашем собственном коде происходит какая то магия с формированием чисел? Вы его не контролируете что ли?
В чем смысл понять эту магию? И с чего вы взяли что в формировании другого значения участвуют именно 7, 8, 9 ячейки? Откуда такие предположения?
Есть карточная игра и её разработчики придумали недавно выпустили патч, в котором можно колоду сконвертировать в строку и например скинуть другу, друг копирует и в игре вставив этот код - получает готовую колоду, т.е. руками он не выбирает карты. В строке хранится информация про формат, какие карты туда входят и в каком количестве и еще немного ненужной инфы, так вот код примерно выглядит так 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 количества карт.
Извиняюсь, наверно неправильно выразился. Никита правильно сказал - правые. Я написал предысторию, где описал, что если 7й(8й по счёту) бит равен 1, то он обрезается.
Немного поясню свои слова, воможно и тут неправильно написал и запутал... 7й бит - 8й по счету,
по индеку - 0й, 1й...7й
по счету - 1й, 2й...8й
рабочий пример
10010001 = 0010001
самый левый = 1, обрезается и идет дальше
11000111 = 1000111
самый левый = 1, обрезается и идет дальше 00000010 = 00000010
самый левый = 0, не обрезается, формирование заканчивается = 0000001010001110010001 в десятичной 41873
Но разработчики выпустили новый комплект карт и начали появляться вот такое значения
11100011 10000000
тут уже идет ругой ID, что из примера выше
10010001
11000111
00000010
....
и когда скрипт встречает такое, он
11100011 = 1100011
самый левый = 1, обрезается и идет дальше
10000000 = 0000000
самый левый = 1, обрезается и идет дальше
....Хотя тут уже должно было закончиться формирование ID(т.к. дальше точно идет правильный id) и начаться процесс формирования следующего ID вместо этого он продолжает и затрагивает следующие карты 10010001 и тд, т.е. создает большое число из 2х ID, которое конечно же не является уже корректным
10000000 - такое значение встречается несколько раз в одной колоде, возможно оно является каким-то флагом..