@soofftt91

Как расшифровать флаги от VK API?

Делаю Long Poll запрос к VK, в ответ получаю JSON с приходящими сообщениями. В этом json есть число которое является суммой кодов следующих параметров:
1d954319fcb8454fa7aa5a77e7cfaf04.png
Это число нужно расшифровать. С подобной задачей сталкиваюсь впервые и единственное что приходит на ум это заранее посчитать сумму комбинаций параметров. Может есть более грациозное решение?
  • Вопрос задан
  • 896 просмотров
Решения вопроса 2
usdglander
@usdglander
Yipee-ki-yay
if (x & 512) {
  //флаг MEDIA стоит
} else {
  //флаг MEDIA сброшен
}


Так же с другими флагами: 2 - для OUTBOX, 4 - для REPLIED и т . д.
Ответ написан
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.
Смотрим четная или нечетная у нас сумма, если нечетная, значит точно есть флаг 1.
Вычитаем его.

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

Собственно вот набросал вариант на js(смотрите вывод в консоли):
https://jsfiddle.net/littleguga/enzkq9gd/
jsbin.com/mugucuhafu/edit?js,console,output

upd:
Lander предложил более красивый вариант: Как расшифровать флаги от VK API?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@prikazchikof
Можно применить "жадный" алгоритм. Суть такова: на каждой итерации мы подбираем максимальную степень двойки, меньшую либо равную текущему числу. Запоминаем её как одно из слагаемых и отнимаем от числа. Повторяем до тех пор, пока число не станет равным 0.

Пример: разложим число 123.
Максимальная степень двойки, меньшая или равная 123 - 64. Запоминаем 64, отнимаем его от 123, получаем 59.
Максимальная степень двойки, меньшая или равная 59 - 32. Запоминаем 32, отнимаем его от 59, получаем 27.
Максимальная степень двойки, меньшая или равная 27 - 16. Запоминаем 16, отнимаем его от 27, получаем 11.
Максимальная степень двойки, меньшая или равная 11 - 8. Запоминаем 8, отнимаем его от 11, получаем 3.
Максимальная степень двойки, меньшая или равная 3 - 2. Запоминаем 2, отнимаем его от 11, получаем 1.
Максимальная степень двойки, меньшая или равная 1 - 1. Запоминаем 1, отнимаем его от 1, получаем 0.
Алгоритм закончил работу, в результате 123 = 64 + 32 + 16 + 8 + 2 + 1.

Источник: http://ru.stackoverflow.com/questions/334200/Алгор...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 22:44
500 руб./в час
30 апр. 2024, в 21:45
20000 руб./за проект
30 апр. 2024, в 21:36
1500 руб./в час