2013-03-21 3 views
4

Я работаю с преобразованием UIImage в NSData. И я хочу преобразовать NsData в Byte Array и опубликовать массив Byte на сервер с помощью json Parser.Цель c - Как преобразовать nsdata в массив байтов

Если я передаю следующий тип статической строки на сервер, он принимает и сохраняет. Ниже приведен пример синтаксиса строки. Я хочу, чтобы следующий массив байтов отправлял данные на сервер.

[255,216,255,224,0,16,74,70,73,70,0,1,1,1,0,96,0,96,0,0,255,219,0,67,0,8,6,6 , 7,6,5,8,7,7,7,9,9,8,10,12 ...]

для приведенного выше результата я уверен, преобразование изображения в данных следующим образом:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 

Теперь я хочу, чтобы преобразовать NSData в массив байтов для этого я использую следующий код:

NSUInteger len = [data length]; 
Byte *byteData = (Byte*)malloc(len); 
memcpy(byteData, [data bytes], len); 
free(byteData) 

и я также хранить это NSData. но не могу получить результат. Я также набрал код с циклом, но каждый раз, когда он дает aPNG.

Я делаю что-то неправильно в приведенном выше коде?

Прошу предоставить мне некоторую помощь, а также запросить помощь для этого.

Заранее спасибо.

+0

Вы хотите преобразовать его в массив байтов (в смысле термина C) или строку, кодированную JSON, которая представляет список числовых значений? – zneak

+0

Любая причина, по которой вы освобождаете свой буфер, как только вы его заполняете? Если вы ожидаете, что буфер все еще удерживает объект NSData, вы не можете рассчитывать на него, если вы его освободите. Только освободите его, когда вам больше не нужен буфер. – mah

+0

@udy Спасибо за ваш ответ, но используя этот путь. это не работает. –

ответ

10

Я не уверен на 100%, это то, что вы ищете или нет. Попытка:

UIImage *image = [UIImage imageNamed:@"image.png"]; 
NSData *data = UIImagePNGRepresentation(image); 
NSUInteger len = data.length; 
uint8_t *bytes = (uint8_t *)[data bytes]; 
NSMutableString *result = [NSMutableString stringWithCapacity:len * 3]; 
[result appendString:@"["]; 
for (NSUInteger i = 0; i < len; i++) { 
    if (i) { 
     [result appendString:@","]; 
    } 
    [result appendFormat:@"%d", bytes[i]]; 
} 
[result appendString:@"]"]; 

Это то, что вам нужно?

+0

Незначительное замечание: если вы объявляете 'bytes' как' const uint8_t * bytes', вам не нужен тип, наложенный на rhs. –