2013-06-21 3 views
1

Я получаю от веб-сервиса это шестнадцатеричноеПреобразовать шестнадцатеричный к NSData

http://www.moodpin.it/cms/listar_avatar?id=9

и пытается преобразовать NSData и установить UIImageView, но он не работает

Вот мой код:

NSData *dataImage = [appDelegate hexStringToData:avatar.avatar]; 
[imageView setImage:[UIImage imageWithData:dataImage]]; 

- (NSData *) hexStringToData:(NSString *) aString 
       { 
NSString *command = aString; 
command = [command stringByReplacingOccurrencesOfString:@" " withString:@""]; 
NSMutableData *commandToSend= [[NSMutableData alloc] init]; 
unsigned char whole_byte; 
char byte_chars[3] = {'\0','\0','\0'}; 
int i; 
for (i=0; i < [command length]/2; i++) { 
    byte_chars[0] = [command characterAtIndex:i*2]; 
    byte_chars[1] = [command characterAtIndex:i*2+1]; 
    whole_byte = strtol(byte_chars, NULL, 16); 
    [commandToSend appendBytes:&whole_byte length:1]; 
} 
NSLog(@"%@", commandToSend); 
return commandToSend; 
} 

ответ

1

for (i=0; i < 8; i++) {

«не работает» довольно расплывчато. Мое первое впечатление заключается в том, что вы смотрите только на первые 16 байт (два байта на итерацию), поэтому вы, очевидно, не получите кусок данных, соответствующий входной строке. Похоже, вы должны использовать длину строки для управления циклом for. Кроме того, если строка содержит нечетное число символов, ваш код будет эффективно добавлять символ 0 в шестую строку.

Помимо того, что ваш код не работает, вы также можете рассмотреть другой подход к преобразованию. Например, вы можете создать таблицу поиска с 256 символами, заполненную некоторым недопустимым значением (-1), за исключением символов, соответствующих шестизначным числам, то есть 0..9, a..f и A..F. Значения в таблице в позициях, соответствующих этим символам, будут иметь шестнадцатеричное значение, поэтому 10 по индексам a и A, например. Это будет работать только для конкретных однобайтовых кодировок символов, таких как ASCII, но это не может быть серьезным ограничением в этом случае. Используйте таблицу поиска, чтобы быстро найти значение каждой шестнадцатеричной цифры, а затем используйте эти значения в качестве кусков, чтобы строить свои байты.

+0

, когда я установил возвращенные NSData для UIImage, UIImage равен нулю – user2501387