Как преобразовать int в байт в Objective-C?

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

Спасибо,


person suse    schedule 22.04.2010    source источник
comment
Возможный дубликат: Stackoverflow - сохранить int в массиве символов?. По крайней мере, это может привести вас к char[].   -  person    schedule 22.04.2010


Ответы (2)


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

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

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

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

person Michael Aaron Safyan    schedule 22.04.2010
comment
Предполагая, что вы знаете, что это целое число, не могли бы вы просто использовать цикл и использовать кратные 8, чтобы надежно поиграть с их байтами, используя длину, которую вы определяете из sizeof()? - person Joel Fischer; 10.03.2014

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

Пример:

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

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

Добавить NSInteger в NSMutableData

person David Waring    schedule 27.11.2012
comment
Для данных типа int, то есть 21, он вернет 15 00 00 00 в массиве байтов или как NSData, или в массиве байтов. {15, 00, 00, 00}. Но иногда мне нужно в обратном порядке, ‹00 00 00 15› в шестнадцатеричном формате или в массиве как int (21) = {00, 00, 00, 15}. В таком случае такой подход не сработает. - person karim; 13.12.2012