c эквивалент php apns кода - PullRequest
       5

c эквивалент php apns кода

1 голос
/ 23 сентября 2010

Я пишу приложение .c apns (сервер push-уведомлений Apple),
У меня остальная часть программы работает, т.е. подключение к серверам, устанавливающим ssl, json кодирование сообщения и т. Д.
Однако я застрял в части, которая преобразует токен в часть шестнадцатеричной строки.
Пример значения
$ deviceToken равен "4DBCD414F624842E581972E65D2DAA4B96279B209BD0CE10AB12E52AEA48A670"
$ apnsMessage is "{" aps ": {" alert ":" testing "," badge ": 1," sound ":" elephant.aiff "}}"

Вот фрагмент php, который выполняет работу в данный момент.

$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($message)) . $message;
fwrite($this->apnsConnection, $apnsMessage);

Любая помощь будет оценена. Спасибо Питер

1 Ответ

1 голос
/ 23 сентября 2010

chr функция в PHP принимает целое число и возвращает строку с одним символом, который является ASCII-символом эквивалента ввода. Пример chr(48) вернет "0". В C вы можете сделать это, используя snprintf как:

int val = 30;
char str[2];
snprintf(str,2,"%c",val);

. в PHP - это конкатенация строк, в C вы можете сделать это, используя функции strcat и strcpy. Пример:

$msg = "a" . "b";

в C будет:

char msg[MAX];
strcpy(msg,"a");
strcat(msg,"b");

strlen работает одинаково :) на C и PHP. Он принимает строку и возвращает ее длину.

Нет прямой функции для выполнения работы str_replace. Вам нужно будет запустить строку, проверяющую каждый символ.

Пример: для имитации str_replace('a','b',$str):

for(i=0;str[i];i++) {
 if(str[i] == 'a') { 
  str[i] = b;
 }
}
...