#objective-c #ios4 #websocket
#objective-c #ios4 #websocket
Вопрос:
Я пытаюсь реализовать WebSocket handshake (76) в ObjC и не могу понять (поскольку я новичок в C и ObjC), как я могу получить следующее:
- Элемент списка
-
У меня есть два числа
155712099 173347027
-
Мне нужно преобразовать их в 32-разрядные числа с большим порядком
- объединить их в строку
- и выразить результирующую строку в ASCII
Помощь высоко ценится.
Комментарии:
1. Я пробовал CFSwapInt32HostToBig. Я просто не понимаю, как я могу увидеть в NSLog 32-разрядное число в двоичном формате. Fx, NSLog(@»%?», число)
2. Установите точку останова, затем щелкните правой кнопкой мыши переменную в вашем представлении переменных, а затем просмотрите память «variableName»
3. Для отображения числа в двоичном формате нет
printf()
спецификатора стиля. Вам придется создать свой собственный, если вам нужна такая функциональность.4. @Joe, спасибо, хорошая идея. @Jonathan есть какие-нибудь подсказки о том, как я мог бы это сделать? ссылка или что-то еще.
Ответ №1:
Поскольку вы используете iPhone SDK, у вас есть доступ к Core Foundation. Использовать:
uint32_t myInt32Value = ...;
uint32_t myInt32AsABigEndianNumber = CFSwapInt32HostToBig(myInt32Value);
Комментарии:
1. Интересно. В руководстве по программированию управления памятью для Core Foundation говорится, что эти функции доступны только в Mac OS X, но в документации по функциям говорится, что они доступны с iOS 2.0.
2. Итак, какой из них лучше в данном случае CFSwapInt32HostToBig или htonl?
3. Они делают ту же математическую вещь. Однако я предпочитаю
CFSwapInt32HostToBig()
, потому что оно встроено (покаhtonl()
естьextern
) и потому, что название лучше описывает то, чего я пытаюсь достичь (т. Е. переключиться на big endian, а не на сетевой порядок — если я не пытаюсь сделать что-то связанное с сетью, в этом случае я бы использовалhtonl()
.)4. @Anomie: На самом деле, документация, похоже, не ограничивает эти функции только Mac OS X. В любом случае, они доступны на iOS с первого дня и полностью документированы там.
5. @JonathanGrynspan: Смотрите в самом низу связанной страницы: «Обратите внимание, что функции замены байтов Core Foundation доступны только в Mac OS X».
Ответ №2:
Objective-C основан на C и обычно имеет доступную стандартную библиотеку C, поэтому вы можете использовать стандартную htonl
функцию. Затем вы можете выполнять манипуляции со строками, используя обычные строковые функции.