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

Я пишу приложение .c apns (сервер push-уведомлений Apple),
у меня есть остальная часть программы, т. е. подключение к серверам, установление ssl, json, кодирование сообщения и т. д.
Однако я застрял на части который преобразует токен в часть шестнадцатеричной строки.
Примеры значений
$deviceToken — "4DBCD414F624842E581972E65D2DAA4B96279B209BD0CE10AB12E52AEA48A670"
$apnsMessage — "{"aps":{"alert":"testing","badge":1 ,"звук":"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);

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


person Peter    schedule 23.09.2010    source источник
comment
Я не очень понимаю проблему. У вас есть токен в двоичном формате и вы хотите преобразовать его в строку ascii с помощью C?   -  person sewa    schedule 23.09.2010


Ответы (1)


Функция 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;
 }
}
person codaddict    schedule 23.09.2010
comment
Спасибо за быстрый ответ, я попытаюсь проверить это. Есть ли альтернатива php-команде pack('H*'? - person Peter; 23.09.2010