У меня есть приложение 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 = ...;
Пожалуйста, помогите мне с идентификатором
Если ваша задача состоит в том, чтобы сделать целое число из четырех байтов, это можно сделать с помощью:
char data[6];
...
int Command = data[0];
int Status = data[1];
int Identifier = (data[2] << 24)
| (data[3] << 16)
| (data[4] << 8)
| data[5];
Это относится к идентификатору как к бай-ину, но поскольку в документации говорится, что идентификатор непрозрачен, вы должны быть в порядке, если вы рассматриваете идентификатор как большой конечный элемент во всем приложении.
В документации также упоминаются байты, а не символы, поэтому, возможно, ваши переменные должны быть без знака?
|
с дополнением здесь, но это не то же самое во всех случаях. (Побитовый или как сложение без переноса.) Я предпочитаю, чтобы мои выражения были либо побитовыми, либо полностью арифметическими. Порядок, в котором вы сдвигаете свои биты, определяет идентификатор. Идентификатор является непрозрачным, поэтому он не имеет никакого значения для клиентского кода. Выберите одно представление и придерживайтесь его в своем коде, т.е. используйте тот же порядок байтов при обратной записи.