Инструмент преобразования битов в Objective-C - PullRequest
3 голосов
/ 18 декабря 2011

Существуют ли какие-либо встроенные утилиты или макросы в библиотеках Objective-C для iOS, которые позволят вам преобразовывать байты в целые числа и обратно в отношении порядка байтов?перестановка.Я пытаюсь избежать написания пользовательского кода, чтобы сделать это, если он уже существует.

Я бы хотел, чтобы код преобразовывал NSData * в примитивные типы (int, uint, short и т. Д.) И преобразовывал примитивные типы обратно в NSData *.

Ответы [ 2 ]

9 голосов
/ 18 декабря 2011

Вы можете получить байты от NSData, открыв свойство bytes. Затем просто приведите это к указателю на любой тип, который вы хотите. Очевидно, вам нужно убедиться, что вы знаете порядок и размер того, что находится в вашем NSData.

, например

#include <CFByteOrder.h>

// Bytes to uint32_t
NSData *data = <THE_DATA>;
void *bytes = [data bytes];
uint32_t *intBytes = (NSInteger*)bytes;
uint32_t swapped = CFSwapInt32BigToHost(*intBytes); ///< If the data in `data' is big endian

// uint32_t to bytes
uint32_t someInt = 1234;
uint32_t swappedInt = CFSwapInt32HostToBig(someInt); ///< If we want to store in big endian
NSData *data = [NSData dataWithBytes:&swappedInt length:sizeof(swappedInt)];
4 голосов
/ 18 декабря 2011

Я думаю, вам нужно семейство функций CFSwapInt32 *.

См. Документы Apple .

...