2013-06-21 81 views
1

我从WebService得到这个十六进制转换十六进制转换为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字符附加到十六进制字符串。

除了使代码无法正常工作之外,您可能还会考虑另一种转换方法。例如,除了对应于十六进制数字的字符(例如0..9,a..f和A..F),您可以创建一个填充了无效值(-1)的256个字符的查找表。例如,表中与这些字符对应的位置处的值将具有十六进制数字值,因此10的索引为aA。这只适用于特定的单字节字符编码,如ASCII,但在这种情况下可能不是严格的限制。使用查找表可以快速找到每个十六进制数字的值,然后使用这些值作为半字节来构建您的字节。

+0

当我将返回的NSData设置为UIImage时,UIImage是零 – user2501387