Как конвертировать int в байт в Objective-C? - PullRequest
4 голосов
/ 22 апреля 2010

У меня есть значение типа int, которое необходимо преобразовать в байтовый массив. Как вы делаете это в Objective-C? Есть ли способы сделать это?

Спасибо,

Ответы [ 2 ]

6 голосов
/ 22 апреля 2010

Каким образом конвертируется? Вы хотите это в порядке байтов с прямым порядком байтов, порядком байтов или порядком байтов? Если вы хотите, чтобы это было в собственном порядке байтов, то все, что вам нужно сделать, это:

int val = //... initialize integer somehow
char* bytes = (char*) &val;
int len = sizeof(int);

Тем не менее, лучший способ манипулировать байтами целого числа - это выполнять побитовые операции. Например, чтобы получить младший байт, вы можете использовать val & 0xFF, для получения следующего вы используете (val>>8)&0xFF, затем (val>>16)&0xFF, затем (val>>24)&0xFF и т. Д.

Конечно, это зависит от размера вашего типа данных. Если вы делаете такие вещи, вы действительно должны включить <inttypes.h>; и использовать uint8_t, uint16_t, uint32_t или uint64_t, в зависимости от какое целое число вы хотите; в противном случае вы не можете надежно поиграться с большим количеством байтов.

1 голос
/ 27 ноября 2012

Я подозреваю, что вы хотите передать этот байтовый массив где-нибудь, возможно, объекту NSMutableData. Вы просто передаете адрес & val

Пример:

[myData appendBytes:&myInteger length:sizeof(myInteger)]; 

Эта ссылка более полная и имеет дело с порядком байтов:

Добавление NSInteger к NSMutableData

...