APNS. C ++: извлечь идентификатор из ответа об ошибке

0

У меня есть приложение C++, которое отправляет уведомления Apple push

Он использует расширенный формат уведомлений https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/LegacyFormat.html#//apple_ref/doc/uid/TP40008194-CH105-SW5

Иногда я получаю ошибки и хочу правильно ее разобрать

Это объяснение формата ответа на ошибки: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW4

У нас есть 1 байтовая команда, 1 байтовый статус и 4 байтовый идентификатор. У меня проблема с извлечением идентификатора

Это мой код, как извлечь команду и статус

 char data[6];
 ...
 int Command = data[0];
 int Status = data[1];
 int Identifier = ...;

Пожалуйста, помогите мне с идентификатором

Теги:
apple-push-notifications

1 ответ

1
Лучший ответ

Если ваша задача состоит в том, чтобы сделать целое число из четырех байтов, это можно сделать с помощью:

char data[6];
...
int Command = data[0];
int Status = data[1];
int Identifier = (data[2] << 24) 
               | (data[3] << 16) 
               | (data[4] << 8) 
               | data[5];

Это относится к идентификатору как к бай-ину, но поскольку в документации говорится, что идентификатор непрозрачен, вы должны быть в порядке, если вы рассматриваете идентификатор как большой конечный элемент во всем приложении.

В документации также упоминаются байты, а не символы, поэтому, возможно, ваши переменные должны быть без знака?

  • 0
    Я попробовал это и похоже, что он работает Int. Идентификатор = (int) data [2] + ((int) data [3] << 8) + ((int) data [4] << 16) + ((int) data [5] << 24) .Is это правильный путь?
  • 0
    Вы можете заменить поразрядным или | с дополнением здесь, но это не то же самое во всех случаях. (Побитовый или как сложение без переноса.) Я предпочитаю, чтобы мои выражения были либо побитовыми, либо полностью арифметическими. Порядок, в котором вы сдвигаете свои биты, определяет идентификатор. Идентификатор является непрозрачным, поэтому он не имеет никакого значения для клиентского кода. Выберите одно представление и придерживайтесь его в своем коде, т.е. используйте тот же порядок байтов при обратной записи.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню