Как читать / писать целые из / в NSStreams - PullRequest
0 голосов
/ 17 июля 2009

Как я могу читать и писать целые числа от / до NSStreams? Я знаю, что могу читать байты индивидуально, но я хочу принять во внимание порядок байтов. Java имеет DataStreams для этих случаев, есть ли что-то эквивалентное в Obj-C?

Ответы [ 4 ]

2 голосов
/ 17 июля 2009

Нет ничего подобного для вас в потоках. Существует стандартный набор функций ntoh * / hton * для преобразования из сети в порядок хостов и обратно.

0 голосов
/ 17 июля 2009

Лично я не знаю, есть ли реализация на уровне сокетов.

В Objective C, посмотрите Справочное руководство по Core Endian.

Или взгляните на подпрограммы XDR уровня C, доступные в Mac OS X; процедуры представления внешних данных (XDR) являются частью общей среды RPC уровня Unix.

Или вы можете создавать свои собственные байты.

gSOAP или XML или другие подобные тоже включены в приложения; глядя превзойти сетевой трафик. (Я бы старался избегать использования собственного протокола, если смогу справиться с этим.)

И независимо от того, что вы делаете с этим материалом, не забудьте вставить номер версии в поток байтов в любом сетевом протоколе, который вы здесь реализуете.

0 голосов
/ 17 июля 2009

Я не знаю эквивалента в objc, но взять вещи в свои руки несложно:

Пишите свои числа по одному байту за раз, используя операторы сдвига, и читайте и восстанавливайте их аналогичным образом.

Если вы хотите писать в формате с прямым порядком байтов, сделайте что-то вроде этого:

for(int i = 0; i < 4; i++) WriteAByteLOL((n >> (8*(4-i-1))) & 0xff);

Обратный порядок циклов, если вы хотите немного порядка байтов.

Для чтения сделайте это (предполагается, что данные хранятся в 4-байтовом массиве b):

unsigned int n = 0;
for(int i = 0; i < 4; i++) n = (n<<8) | b[i];

Легко!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...